Skip to main content

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


Download files

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

Source Distribution

errr-1.2.2.tar.gz (8.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

errr-1.2.2-py2.py3-none-any.whl (5.6 kB view details)

Uploaded Python 2Python 3

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

Hashes for errr-1.2.2.tar.gz
Algorithm Hash digest
SHA256 40561a8b4e496f3458eb9174229b3752701396ece69c2cf3d382f4ebb6344bd1
MD5 77d4684a196be44ceaadaf8ab60933ef
BLAKE2b-256 58fee6fe4ee3d283354e6a4ce1e8296dee78bf40e0f580002349bc90cbbf8e01

See more details on using hashes here.

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

Hashes for errr-1.2.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e4baa9ab30a1848ddd1d3571207bfcc2e4127230e92caa36a5fd0f463362431b
MD5 98ef008151a31da87133b64a49531716
BLAKE2b-256 eab32db1656dc3bb0c50485e7f20ab81cc92b0a9c6269906838f54b0fe76c591

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page