2009-05-25 52 views
1

我最近发现了非常有用的“-i”标志的Python如何检查Python引发异常的函数的作用域?

 
-i  : inspect interactively after running script, (also PYTHONINSPECT=x) 
     and force prompts, even if stdin does not appear to be a terminal 

这是伟大的,在全球范围内检查对象,但如果异常是在一个函数调用提出会发生什么,我是否想检查函数的局部变量?当然,我对第一次提出例外的范围感兴趣,有什么办法可以达到它?

+0

检查这个问题:[自动启动python调试器出错](http://stackoverflow.com/questions/242485/starting-python-debugger-automatically-on-error) – tzot 2009-05-25 13:41:33

+0

谢谢,但这并不完全是我寻找。如果可能的话,我不希望包装代码。 – saffsd 2009-05-25 13:59:15

回答

5

在交互提示,立即键入

>>> import pdb 
>>> pdb.pm() 

pdb.pm()是“验尸”调试器。它会将您置于引发异常的范围内,然后您可以使用通常的pdb命令。我一直使用。它是标准库的一部分(不需要ipython),不需要在您的源代码中编辑调试命令。

唯一的诀窍是记得马上去做;如果您先输入任何其他命令,您将失去发生异常的范围。

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. 

“一旦调试器启动时,可以使用所有常规命令来 步通过代码,设置断点,等等见PDB来自Python标准库的文档 以了解使用细节。“

+0

谢谢布莱恩! – reto 2009-05-25 13:25:29

5

在IPython中,您可以在您的代码崩溃,而不必修改它的位置检查变量:

>>> %pdb on 
>>> %run my_script.py