lev*_*que 47 python debugging ipython
当我的程序运行引发异常的行时,有没有办法启动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()
Run Code Online (Sandbox Code Playgroud)
使用命令:
ipython -pdb exceptionTest.py
Run Code Online (Sandbox Code Playgroud)
这会在引发错误时停止执行,但会给我一个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提示符,并且所有作用域都可访问.
Ada*_*all 24
import sys
from IPython.core import ultratb
sys.excepthook = ultratb.FormattedTB(mode='Verbose',
color_scheme='Linux', call_pdb=1)
Run Code Online (Sandbox Code Playgroud)
rco*_*oup 19
这样做:
ipython --pdb -c "%run exceptionTest.py"
Run Code Online (Sandbox Code Playgroud)
在IPython初始化之后启动脚本并且您将进入正常的IPython + pdb环境.
jon*_*jon 12
ipdb将IPython功能集成到pdb中.我使用以下代码将我的应用程序放入IPython调试器后,在一个无法处理的异常之后.
import sys, ipdb, traceback
def info(type, value, tb):
traceback.print_exception(type, value, tb)
ipdb.pm()
sys.excepthook = info
Run Code Online (Sandbox Code Playgroud)
@ snapshoe的答案不适用于较新版本的IPython.
但是这样做:
import sys
from IPython import embed
def excepthook(type, value, traceback):
embed()
sys.excepthook = excepthook
Run Code Online (Sandbox Code Playgroud)
您可以尝试以下方法:
from ipdb import launch_ipdb_on_exception
def main():
with launch_ipdb_on_exception():
# The rest of the code goes here.
[...]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13438 次 |
| 最近记录: |