Search code examples
pythonexceptionjupyter-notebook

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.

This answer suggests sys.tracebacklimit = 0 but trying that gave the following:

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.

How can I hide the traceback?


Solution

  • I have found a couple ways to do this, both involving monkeypatching IPython.

    #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. This will output the exception and color code the exception type (just like Jupyter normally does, but without the traceback):

    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