nice Python exception hook replacement
Project description
==============
better_exchook
==============
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 <https://github.com/albertz/py_better_exchook/blob/master/better_exchook.py>`_ for further details.
You can just copy over the file ``better_exchook.py`` to your project.
Or alternatively, it is also available `on PyPI <https://pypi.python.org/pypi/better_exchook>`_
and can be installed via:
.. code::
pip install better_exchook
Usage:
.. code:: python
import better_exchook
better_exchook.install() # will just do: sys.excepthook = better_exchook
Python example code:
.. code:: python
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:
.. code::
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:
.. code:: python
try:
f = lambda x: None
f(x, y)
except Exception:
better_exchook.better_exchook(*sys.exc_info())
Output:
.. code::
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:
.. code:: python
try:
(lambda x: None)(__name__,
42) # multiline
except Exception:
better_exchook.better_exchook(*sys.exc_info())
Output:
.. code::
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:
.. code:: python
# use this to overwrite the global exception handler
sys.excepthook = better_exchook.better_exchook
# and fail
finalfail(sys)
Output:
.. code::
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:
- `<https://github.com/patrys/great-justice>`_
- `Nose does something similar for assertion failures <http://nose.readthedocs.io/en/latest/plugins/failuredetail.html>`_.
- IPython has something similar (`this <https://github.com/ipython/ipython/blob/master/IPython/core/ultratb.py>`_). Do this: ``from IPython.core import ultratb; sys.excepthook = ultratb.VerboseTB()``.
- Ka-Ping Yee's "cgitb.py", which is part of Python, `see here <https://docs.python.org/3/library/cgitb.html>`_, `code here <https://github.com/python/cpython/blob/3.7/Lib/cgitb.py>`_.
- See `this <http://stackoverflow.com/questions/1308607/python-assert-improved-introspection-of-failure>`_ related StackOverflow question.
-- Albert Zeyer, <http://www.az2000.de>
better_exchook
==============
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 <https://github.com/albertz/py_better_exchook/blob/master/better_exchook.py>`_ for further details.
You can just copy over the file ``better_exchook.py`` to your project.
Or alternatively, it is also available `on PyPI <https://pypi.python.org/pypi/better_exchook>`_
and can be installed via:
.. code::
pip install better_exchook
Usage:
.. code:: python
import better_exchook
better_exchook.install() # will just do: sys.excepthook = better_exchook
Python example code:
.. code:: python
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:
.. code::
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:
.. code:: python
try:
f = lambda x: None
f(x, y)
except Exception:
better_exchook.better_exchook(*sys.exc_info())
Output:
.. code::
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:
.. code:: python
try:
(lambda x: None)(__name__,
42) # multiline
except Exception:
better_exchook.better_exchook(*sys.exc_info())
Output:
.. code::
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:
.. code:: python
# use this to overwrite the global exception handler
sys.excepthook = better_exchook.better_exchook
# and fail
finalfail(sys)
Output:
.. code::
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:
- `<https://github.com/patrys/great-justice>`_
- `Nose does something similar for assertion failures <http://nose.readthedocs.io/en/latest/plugins/failuredetail.html>`_.
- IPython has something similar (`this <https://github.com/ipython/ipython/blob/master/IPython/core/ultratb.py>`_). Do this: ``from IPython.core import ultratb; sys.excepthook = ultratb.VerboseTB()``.
- Ka-Ping Yee's "cgitb.py", which is part of Python, `see here <https://docs.python.org/3/library/cgitb.html>`_, `code here <https://github.com/python/cpython/blob/3.7/Lib/cgitb.py>`_.
- See `this <http://stackoverflow.com/questions/1308607/python-assert-improved-introspection-of-failure>`_ related StackOverflow question.
-- Albert Zeyer, <http://www.az2000.de>
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file better_exchook-1.20181019.221648.tar.gz.
File metadata
- Download URL: better_exchook-1.20181019.221648.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Python-urllib/3.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
86122b966b33cf7fa242b51ccffa7ee8b5567b5bc3294330192d4d57b7c2581b
|
|
| MD5 |
e4b50b3d6a2110d85457a5a46689dc74
|
|
| BLAKE2b-256 |
e0c48630953df4b692a51ce1092b1717412f7f66cc1f30df660c36c50b50e47c
|