Skip to main content

A nicer drop-in-replacement for Python sys.excepthook. It will add some useful information for each frame, like printing the relevant variables (relevant = referenced in the code line). Also see Python source and comments for further details.

You can just copy over the file better_exchook.py to your project. Or alternatively, it is also available on PyPI and can be installed via:

pip install better_exchook

Usage:

import better_exchook
better_exchook.install()  # will just do: sys.excepthook = better_exchook

Python example code:

try:
    x = {1:2, "a":"b"}
    def f():
        y = "foo"
        x, 42, sys.stdin.__class__, sys.exc_info, y, z
    f()
except Exception:
    better_exchook.better_exchook(*sys.exc_info())

Output:

EXCEPTION
Traceback (most recent call last):
  File "better_exchook.py", line 478, in <module>
    line: f()
    locals:
      f = <local> <function f at 0x107f1de60>
  File "better_exchook.py", line 477, in f
    line: x, 42, sys.stdin.__class__, sys.exc_info, y, z
    locals:
      x = <global> {'a': 'b', 1: 2}
      sys = <global> <module 'sys' (built-in)>
      sys.stdin = <global> <open file '<stdin>', mode 'r' at 0x107d9f0c0>
      sys.stdin.__class__ = <global> <type 'file'>
      sys.exc_info = <global> <built-in function exc_info>
      y = <local> 'foo'
      z = <not found>
NameError: global name 'z' is not defined

Python example code:

try:
    f = lambda x: None
    f(x, y)
except Exception:
    better_exchook.better_exchook(*sys.exc_info())

Output:

EXCEPTION
Traceback (most recent call last):
  File "better_exchook.py", line 484, in <module>
    line: f(x, y)
    locals:
      f = <local> <function <lambda> at 0x107f1df50>
      x = <local> {'a': 'b', 1: 2}
      y = <not found>
NameError: name 'y' is not defined

Python example code:

try:
    (lambda x: None)(__name__,
                     42)  # multiline
except Exception:
    better_exchook.better_exchook(*sys.exc_info())

Output:

EXCEPTION
Traceback (most recent call last):
  File "better_exchook.py", line 490, in <module>
    line: (lambda x: None)(__name__,
                           42)  # multiline
    locals:
      x = <local> {'a': 'b', 1: 2}
      __name__ = <local> '__main__', len = 8
TypeError: <lambda>() takes exactly 1 argument (2 given)

Python example code:

# use this to overwrite the global exception handler
sys.excepthook = better_exchook.better_exchook
# and fail
finalfail(sys)

Output:

EXCEPTION
Traceback (most recent call last):
  File "better_exchook.py", line 497, in <module>
    line: finalfail(sys)
    locals:
      finalfail = <not found>
      sys = <local> <module 'sys' (built-in)>
NameError: name 'finalfail' is not defined
Similar projects:

– Albert Zeyer, <http://www.az2000.de>

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

better_exchook-1.20181019.221648.tar.gz (14.9 kB view details)

Uploaded Source

File details

Details for the file better_exchook-1.20181019.221648.tar.gz.

File metadata

File hashes

Hashes for better_exchook-1.20181019.221648.tar.gz
Algorithm Hash digest
SHA256 86122b966b33cf7fa242b51ccffa7ee8b5567b5bc3294330192d4d57b7c2581b
MD5 e4b50b3d6a2110d85457a5a46689dc74
BLAKE2b-256 e0c48630953df4b692a51ce1092b1717412f7f66cc1f30df660c36c50b50e47c

See more details on using hashes here.

Release history Release notifications | RSS feed

1.20250619.746

2 files

1.20250619.45

2 files

1.20240112.4845

1 file

1.20240112.3546

1 file

This release

1.20181019.221648 This release

1 file

1.20160612.132345

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page