ipython调试器:对交互式pdb进行完全回溯



我最近从ipython0.10切换到了ipython0.11。在ipython0.11中,当python调试器参与(即使用%pdb(时,我只看到完整回溯的一小部分,而在ipython 0.10中,我会看到完整回溯。据我所知,完整的回溯不能从pdb命令行直接访问——你可以用"u"导航,但不能直接看到它。

那么,有什么方法可以显示完整的回溯吗?比如配置参数?

或者,更有用的是,有没有办法让ipython只显示被捕获的Exception,而不是显示它在代码中的位置?

EDIT:示例:

In [1]: pdb
Automatic pdb calling has been turned ON
In [2]: 1/0
> <ipython-input-2-05c9758a9c21>(1)<module>()
     -1 1/0
ipdb> q
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
/Users/adam/<ipython-input-2-05c9758a9c21> in <module>()
----> 1 1/0
ZeroDivisionError: integer division or modulo by zero

我想在q'退出pdb之前查看ZeroDivisionError。

有没有办法让ipython只显示异常捕获,而不是显示它在代码中的位置?

您可以使用sys.excepthook:

import sys
def exc_hook(type, value, traceback):
    print type
sys.excepthook = exc_hook

来自sys模块文档:

sys.excepthook(type, value, traceback)

此函数将给定的回溯和异常打印到sys.stderr.

当引发并未捕获异常时,解释器调用带有三个参数的sys.exceptbook,异常类,异常实例和回溯对象。在交互式会话中就在控制返回到提示之前发生;在Python中程序在程序退出之前发生这种情况。处理这种顶级异常可以通过分配另一个CCD_ 6的三参数函数。

sys.__displayhook__
sys.__excepthook__

这些对象包含displayhook和在程序开始时要仔细阅读。它们被保存,以便displayhook和excepthook可以恢复,以防它们碰巧替换为损坏的对象。


您也可以尝试在--xmode选项设置为Plain 的情况下启动ipython

来自IPython参考:

$ ipython [options] files
--xmode=<modename>

异常报告模式。

有效模式:普通模式、上下文模式和详细模式。

Plain:类似于python的正常回溯打印。

Context:在回溯中的每一行周围打印5行上下文源代码。

Verbose:类似于Context,但额外打印异常发生时当前可见的变量(缩短其字符串如果太长(。如果你碰巧拥有字符串表示复杂的庞大数据结构计算。你的电脑可能会因为cpu而冻结一段时间使用率为100%。如果发生这种情况,可以使用取消回溯Ctrl-C(可能不止一次(。

以下是一些用法示例。注意每次回溯的行数差异:

--xmode=Plain

[ 19:55 jon@hozbox ~/SO/python ]$ ipython --xmode=Plain ipython-debugger-full-traceback-on-interactive-pdb.py 
------------------------------------------------------------
Traceback (most recent call last):
  File "ipython-debugger-full-traceback-on-interactive-pdb.py", line 2, in <module>
    1 / 0
ZeroDivisionError: integer division or modulo by zero

--xmode=Context

[ 19:55 jon@hozbox ~/SO/python ]$ ipython --xmode=Context ipython-debugger-full-traceback-on-interactive-pdb.py 
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
/home/jon/SO/python/ipython-debugger-full-traceback-on-interactive-pdb.py in <module>()
      1 
----> 2 #!/usr/bin/python
      3 1 / 0
      4 
      5 
ZeroDivisionError: integer division or modulo by zero

--xmode=Verbose

[ 19:54 jon@hozbox ~/SO/python ]$ ipython --xmode=Verbose ipython-debugger-full-traceback-on-interactive-pdb.py 
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
/home/jon/SO/python/ipython-debugger-full-traceback-on-interactive-pdb.py in <module>()
      1 
----> 2 #!/usr/bin/python
      3 1 / 0
      4 
      5 
ZeroDivisionError: integer division or modulo by zero

并且不指定.py文件:

--xmode=Plain

[ 19:55 jon@hozbox ~/SO/python ]$ ipython --xmode=Plain
In [1]: 1 / 0
------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero

--xmode=Context

[ 20:03 jon@hozbox ~/SO/python ]$ ipython --xmode=Context
In [1]: 1 / 0
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
/home/jon/SO/python/<ipython console> in <module>()
ZeroDivisionError: integer division or modulo by zero

--xmode=Verbose

[ 20:01 jon@hozbox ~/SO/python ]$ ipython --xmode=Verbose

In [1]: 1 / 0
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
/home/jon/SO/python/<ipython console> in <module>()
ZeroDivisionError: integer division or modulo by zero

使用Python调试器。

相关内容

  • 没有找到相关文章

最新更新