如何在Jupyter中抑制回溯?

Ser*_*gar 3 python exception-handling jupyter-notebook

我想在Jupyter笔记本的Python代码中隐藏追溯,因此仅显示错误类型和消息。

这个答案表明,sys.tracebacklimit = 0但是尝试给出了以下内容:

错误:root:检查模块中的内部Python错误。
以下是此内部错误的回溯。

错误:root:检查模块中的内部Python错误。
以下是此内部错误的回溯。

追溯(最近一次通话): 
断言错误 
追溯(最近一次通话): 
断言错误

该答案还建议替换sys.excepthook为自定义函数,但仍显示回溯。

如何隐藏回溯?

小智 7

我认为xmode魔法就是您在这里寻找的东西。只需在单元格中输入即可。有四种模式:Context、Minimal、Verbose 和 Plain(我认为是默认模式)。您可以使用xmode <mode>或不带参数切换到下一个模式。

In [1]: %xmode
Exception reporting mode: Minimal

In [2]: %xmode
Exception reporting mode: Plain
Run Code Online (Sandbox Code Playgroud)

这是与一个简单错误的区别。通过更详细的错误消息可以更容易地看到差异。

xmode Minimal

x = 6 / 0
Run Code Online (Sandbox Code Playgroud)

回报

ZeroDivisionError: division by zero
Run Code Online (Sandbox Code Playgroud)

xmode plain

x = 6 / 0


Traceback (most recent call last):
                                                                        
File "<ipython-input-187-28f66aec0cca>", line 2, in <module>
x = 6/0

ZeroDivisionError: division by zero




%xmode Plain
<PRE>pd.read_csv("foo.bar")
%xmode Context
pd.read_csv("foo.bar")
%xmode Verbose
pd.read_csv("foo.bar")


         
Run Code Online (Sandbox Code Playgroud)


Ser*_*gar 5

我发现了几种方法,都涉及到猴子修补IPython。

#1 这将仅输出异常类型和消息,但在输出区域中以红色突出显示:

from __future__ import print_function  # for python 2 compatibility
import sys
ipython = get_ipython()

def exception_handler(exception_type, exception, traceback):
    print("%s: %s" % (exception_type.__name__, exception), file=sys.stderr)

ipython._showtraceback = exception_handler
Run Code Online (Sandbox Code Playgroud)

#2。这将输出异常并为异常类型添加颜色代码(就像Jupyter通常所做的一样,但没有回溯):

import sys
ipython = get_ipython()

def hide_traceback(exc_tuple=None, filename=None, tb_offset=None,
                   exception_only=False, running_compiled_code=False):
    etype, value, tb = sys.exc_info()
    return ipython._showtraceback(etype, value, ipython.InteractiveTB.get_exception_only(etype, value))

ipython.showtraceback = hide_traceback
Run Code Online (Sandbox Code Playgroud)