使IPython看起来像普通的python shell

时间:2017-06-23 12:35:26

标签: python ipython

我最大的问题是花哨的IPython异常。我希望它们看起来像普通的python 异常,但是当我尝试重置sys.excepthook时,它不起作用:

In [31]: import sys; sys.excepthook = sys.__excepthook__; (sys.excepthook, sys.__excepthook__)
Out[31]: 
(<bound method TerminalInteractiveShell.excepthook of <IPython.terminal.interactiveshell.TerminalInteractiveShell object at 0x27c8e10>>,
 <function sys.excepthook>)

1 个答案:

答案 0 :(得分:3)

每次执行一行代码时,IPython都会替换sys.excepthook,每次都无需更改它。除此之外,IPython捕获所有异常并自行处理它们,而不必调用sys.excepthook

answer相关问题提供了一种覆盖此行为的方法:基本上,您可以使用格式化和显示异常的函数来覆盖Ipython的showtraceback函数你想要的方式。

def showtraceback(self):
    traceback_lines = traceback.format_exception(*sys.exc_info())
    del traceback_lines[1]
    message = ''.join(traceback_lines)
    sys.stderr.write(message)

import sys
import traceback
import IPython
IPython.core.interactiveshell.InteractiveShell.showtraceback = showtraceback