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)
我发现了几种方法,都涉及到猴子修补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)