在异常情况下启动IPython Shell

发布于 2021-01-29 18:18:06

当我的程序运行引发异常的行时,是否可以启动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并读取其变量zg而没有任何问题。即使不设置该-pdb选项,也可以在交互模式下运行IPython,然后%debug在程序错误退出后调用magic函数-
这还将使您进入具有所有作用域的交互式ipdb提示符。

关注者
0
被浏览
177
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    IPython v0.13的更新:

    import sys
    from IPython.core import ultratb
    sys.excepthook = ultratb.FormattedTB(mode='Verbose',
         color_scheme='Linux', call_pdb=1)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看