如何检查Python抛出异常时函数的作用域?

2 投票
3 回答
1371 浏览
提问于 2025-04-15 11:49

我最近发现了一个非常有用的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),也不需要在你的代码里添加调试命令。

唯一需要注意的是要记得立刻使用;如果你先输入了其他命令,就会失去出现错误的那个上下文。

撰写回答