使用nosetests --pdb选项设置断点

91 投票
4 回答
26147 浏览
提问于 2025-04-16 11:32

nosetests --pdb 这个命令可以让我在出现错误或失败时暂停,但对我来说,这个时机太晚了。我希望在代码执行时逐步查看,这样能帮助我找到问题所在。

不过,nosetests 还是挺有用的,因为它支持依赖相对导入的测试(也就是在一个包里的测试)。

我该如何在测试执行之前设置断点呢?目前我使用的是:

python -m pdb /path/to/my/nosetests testfile.py

这个方法不太够用。nosetests 会干扰 pdb 的输出,而且我的键盘控制(比如方向键)也失灵了。

使用 import pdb; pdb.set_trace() 似乎是个好主意,但 nosetests 阻止了我访问 pdb 控制台。

4 个回答

5

如果你有ipython,想要体验无限的酷炫功能,可以使用:

import ipdb; ipdb.set_trace() 

*无限的酷炫功能:就像ipython一样,支持自动补全、代码高亮等等。

149

比起记得使用 -s,更好的办法是用 Nose 提供的 set_trace 变体。你只需要在想要进入调试器的地方添加

from nose.tools import set_trace; set_trace()

就可以了。输入和输出的重定向会自动处理。唯一我遇到的奇怪副作用是,在使用 Nose 运行调试时,无法在 pdb 中通过 run 命令重新启动代码。

125

你可以在你的代码里任何地方添加

import pdb; pdb.set_trace() 

这样可以让调试器在你指定的地方停下来。

记得在运行nose的时候加上 -s 这个参数,这样它就不会捕捉到 stdout 的输出了。

撰写回答