使IPython看起来像一个普通的python sh

2024-04-24 08:23:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我最大的问题是奇特的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>)

Tags: ofinimportobjectipythonsysoutmethod
1条回答
网友
1楼 · 发布于 2024-04-24 08:23:52

每次执行一行代码时,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

相关问题 更多 >