如何检查Python抛出异常时函数的作用域?
我最近发现了一个非常有用的Python选项 '-i'
-i : inspect interactively after running script, (also PYTHONINSPECT=x) and force prompts, even if stdin does not appear to be a terminal
这个选项非常适合查看全局范围内的对象,但如果异常是在一个函数调用中出现的,我想查看这个函数里的局部变量,那该怎么办呢?我当然是想知道异常最初出现的地方的范围,有没有办法去查看呢?
3 个回答
4
使用ipython: http://mail.scipy.org/pipermail/ipython-user/2007-January/003985.html
使用示例:
from IPython.Debugger import Tracer; debug_here = Tracer()
#... later in your code
debug_here() # -> will open up the debugger at that point.
“一旦调试器启动,你就可以使用它所有的常规命令来逐步执行代码、设置断点等等。有关使用细节,请查看Python标准库中的pdb文档。”
5
在ipython中,你可以查看代码崩溃时的变量状态,而不需要修改代码:
>>> %pdb on
>>> %run my_script.py
7
在交互式提示符下,直接输入
>>> import pdb
>>> pdb.pm()
pdb.pm() 是一个“事后调试”的工具。它会把你带到出现错误的地方,然后你可以使用常规的 pdb 命令来调试。
我几乎一直在用这个。它是标准库的一部分(不需要 ipython),也不需要在你的代码里添加调试命令。
唯一需要注意的是要记得立刻使用;如果你先输入了其他命令,就会失去出现错误的那个上下文。