[英]How do I suppress tracebacks in Jupyter?
I want to hide tracebacks in my Python code in Jupyter notebooks, so only the error type and message are displayed.我想在 Jupyter 笔记本中的 Python 代码中隐藏回溯,因此只显示错误类型和消息。
This answer suggests sys.tracebacklimit = 0
but trying that gave the following:这个答案表明
sys.tracebacklimit = 0
但尝试给出以下结果:
ERROR:root:Internal Python error in the inspect module. Below is the traceback from this internal error. ERROR:root:Internal Python error in the inspect module. Below is the traceback from this internal error. Traceback (most recent call last): AssertionError Traceback (most recent call last): AssertionError
That answer also suggests replacing sys.excepthook
with a custom function, but the traceback was still displayed.该答案还建议用自定义函数替换
sys.excepthook
,但仍显示回溯。
How can I hide the traceback?如何隐藏回溯?
I have found a couple ways to do this, both involving monkeypatching IPython.我找到了几种方法来做到这一点,都涉及到monkeypatching IPython。
#1. #1. This will output just the exception type and message but highlighted in red in the output area:
这将仅输出异常类型和消息,但在输出区域中以红色突出显示:
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
#2. #2. This will output the exception and color code the exception type (just like Jupyter normally does, but without the traceback):
这将输出异常和异常类型的颜色代码(就像 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()
value.__cause__ = None # suppress chained exceptions
return ipython._showtraceback(etype, value, ipython.InteractiveTB.get_exception_only(etype, value))
ipython.showtraceback = hide_traceback
what about关于什么
import functools
ipython = get_ipython()
method_name = "showtraceback"
setattr(
ipython,
method_name,
functools.partial(
getattr(ipython, method_name),
exception_only=True
)
)
I think the xmode
magic is what you are looking for here.我认为
xmode
魔法正是你在这里寻找的。 Just type it in a cell.只需在单元格中键入它。 There are four modes: Context, Minimal, Verbose and Plain(the default I think).
有四种模式:Context、Minimal、Verbose 和 Plain(我认为是默认值)。 you can either use
xmode <mode>
or with no argument it toggles to the next mode.您可以使用
xmode <mode>
或不带参数切换到下一个模式。
In [1]: %xmode
Exception reporting mode: Minimal
In [2]: %xmode
Exception reporting mode: Plain
Here is the difference with a simple error.这是一个简单错误的区别。 It becomes easier to see the differences with more detailed error messages.
通过更详细的错误消息可以更容易地查看差异。
xmode Minimal
x = 6 / 0
returns返回
ZeroDivisionError: division by zero
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 Context
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-188-8224aeca2117> in <module>
1 get_ipython().run_line_magic('xmode', 'Context')
----> 2 x = 6/0
ZeroDivisionError: division by zero
xmode vErboSe
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-189-8fc1397d2e40> in <module>
1 get_ipython().run_line_magic('xmode', 'Verbose')
----> 2 x = 6/0
global x = ['a', 'b', 'c', 'd']
ZeroDivisionError: division by zero
I realize this question was asked a long time ago, but I expect others may land here and after searching stack exchange forever and never posting, I thought I would give back.我意识到很久以前就有人问过这个问题,但我希望其他人可能会在这里登陆,并且在永远搜索堆栈交换并且从未发布之后,我想我会回馈。 I expect some etiquette flames.
我期待一些礼仪之火。 Be gentle and I will know better next time!
温柔点,下次我会知道的更好!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.