【问题标题】:How do I suppress tracebacks in Jupyter?如何抑制 Jupyter 中的回溯?
【发布时间】:2017-09-14 15:13:55
【问题描述】:

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

This answer 建议 sys.tracebacklimit = 0 但尝试给出以下结果:

错误:根:检查模块中的内部 Python 错误。 以下是此内部错误的回溯。 错误:根:检查模块中的内部 Python 错误。 以下是此内部错误的回溯。 回溯(最近一次通话最后): 断言错误 回溯(最近一次通话最后): 断言错误

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

如何隐藏回溯?

【问题讨论】:

    标签: python exception-handling jupyter-notebook


    【解决方案1】:

    我找到了几种方法来做到这一点,都涉及到猴子补丁 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
    

    #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()
        value.__cause__ = None  # suppress chained exceptions
        return ipython._showtraceback(etype, value, ipython.InteractiveTB.get_exception_only(etype, value))
    
    ipython.showtraceback = hide_traceback
    

    【讨论】:

      【解决方案2】:

      怎么样

      import functools
      ipython = get_ipython()
      method_name = "showtraceback"
      setattr(
          ipython,
          method_name,
          functools.partial(
              getattr(ipython, method_name),
              exception_only=True
          )
      )
      

      【讨论】:

      【解决方案3】:

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

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

      这是一个简单错误的区别。通过更详细的错误消息可以更轻松地查看差异。

      xmode Minimal

      x = 6 / 0
      

      返回

      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 Plain
      <PRE>pd.read_csv("foo.bar")
      %xmode Context
      pd.read_csv("foo.bar")
      %xmode Verbose
      pd.read_csv("foo.bar")
      
      
               
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-04
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        相关资源
        最近更新 更多