Elegant detailed Python exceptions.
Project description
errr
Elegantly create detailed exceptions in Python.
Detailed exceptions
>>> import errr
>>> class MyException(errr.DetailedException, list_detailts=True, details=["cause", "type"]):
... pass
...
>>> example = MyException("The backend server crashed", "backend", "crash")
>>> raise example
__main__.MyException: The backend server crashed
Details:
˪cause: backend
˪type: crash
>>> example.details
{'cause': 'backend', 'type': 'crash'}
>>> example.cause
'backend'
Semantic exceptions
You can also rapidly create large semantic trees of exceptions using the make_tree
function, listing exceptions as keyword arguments using the errr.exception factory
method. The make_tree method executes these recursive factories to produce your
exceptions. Nesting these factory methods will make the resultant exceptions inherit from
eachother. All of the produced exceptions are then flat injected into the given module
dictionary (typically) this should be globals() but you can inject into other modules
using sys.modules["name"].__dict__.
from errr import make_tree, exception as _e
make_tree(
# Pass the module dictionary as first argument
globals(),
# List your nested exceptions
RootException=_e(
ChildException=_e(),
Child2Exception=_e()
),
SecondRootException=_e(
# List details as positional arguments
"detail1", "detail2",
# And continue with child exceptions as keyword arguments
AnotherChildException=_e()
)
)
print(RootException)
# <class '__main__.RootException'>
print(ChildException)
# <class '__main__.ChildException'>
print(ChildException.__bases__)
# (<class '__main__.RootException'>,)
Exception wrapping
You can catch and reraise exceptions as a new type of exception with the wrap function:
import errr
class LibraryError(errr.DetailedException, details=["library"]):
pass
for name, library in libraries.items():
try:
library.load()
except Exception as e:
errr.wrap(LibraryError, e, name, prepend="When trying to load %library% it reported:\n")
# Traceback
# ...
# __main__.LibraryError: When trying to load myLibrary it reported:
# Module 'missing' not found.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file errr-1.2.2.tar.gz.
File metadata
- Download URL: errr-1.2.2.tar.gz
- Upload date:
- Size: 8.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40561a8b4e496f3458eb9174229b3752701396ece69c2cf3d382f4ebb6344bd1
|
|
| MD5 |
77d4684a196be44ceaadaf8ab60933ef
|
|
| BLAKE2b-256 |
58fee6fe4ee3d283354e6a4ce1e8296dee78bf40e0f580002349bc90cbbf8e01
|
File details
Details for the file errr-1.2.2-py2.py3-none-any.whl.
File metadata
- Download URL: errr-1.2.2-py2.py3-none-any.whl
- Upload date:
- Size: 5.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.32.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e4baa9ab30a1848ddd1d3571207bfcc2e4127230e92caa36a5fd0f463362431b
|
|
| MD5 |
98ef008151a31da87133b64a49531716
|
|
| BLAKE2b-256 |
eab32db1656dc3bb0c50485e7f20ab81cc92b0a9c6269906838f54b0fe76c591
|