在异常情况下启动IPython Shell
当我的程序运行引发异常的行时,是否可以启动IPython Shell或提示?
我对引发异常的上下文,变量,作用域(和子作用域)最感兴趣。类似于Visual Studio的调试,当引发异常但未被任何人捕获时,Visual
Studio将停止并为我提供调用堆栈和每个级别存在的变量。
您是否认为有办法使用IPython获得类似的东西?
编辑:-pdb
启动IPython时,该选项似乎并没有达到我想要的功能(或者也许我不知道如何正确使用它,这完全有可能)。我运行以下脚本:
def func():
z = 2
g = 'b'
raise NameError("This error will not be caught, but IPython still"
"won't summon pdb, and I won't be able to consult"
"the z or g variables.")
x = 1
y = 'a'
func()
使用命令:
ipython -pdb exceptionTest.py
当出现错误时,它将停止执行,但是会给我一个IPython提示,在这里我可以访问脚本的全局变量,但不能访问函数func的局部变量。pdb
仅在我直接在ipython中键入会导致错误的命令时调用,即raise
NameError("This, sent from the IPython prompt, will trigger pdb.")
。
我不一定需要使用pdb
,我只想访问内部的变量func
。
编辑2:
已经有一段时间了,IPython的-pdb
选项现在可以按照我的意愿工作。这意味着当我引发异常时,我可以返回到范围func
并读取其变量z
,g
而没有任何问题。即使不设置该-pdb
选项,也可以在交互模式下运行IPython,然后%debug
在程序错误退出后调用magic函数-
这还将使您进入具有所有作用域的交互式ipdb提示符。
-
import sys from IPython.core import ultratb sys.excepthook = ultratb.FormattedTB(mode='Verbose', color_scheme='Linux', call_pdb=1)