ExceptionHandler: Python library to decorate exception handling.
Project description
ExceptionHandler: Decorator for Exception Handling
ExceptionHandler is an open-source Python library for simplyfying exception handling. It makes Python handling exception code cleaner and more readable.
Installation
To install ExceptionHandler, use pip with the following command:
pip install exception-handling-decorator
Releases
Latest releases of ExceptionHandler can be found at the PyPI repository: ExceptionHandler on PyPI
Source Code
The source code is stored at the GitHub repository: ExceptionHandler on GitHub
Getting started
Import ExceptionHandler:
from exception_handler import ExceptionHandler
Use @ExceptionHandler decorator with the following parameters:
exception=Exception - Exception(s) to be cР°ught. It can be of type Exception
or its descendant or tuple[Exception]
.
handling_func=None - Function(s) to handle exception(s). It can be of type Callable
or its descendant or tuple[Callable]
. If handling_func is None, the exception will not be handled. If there more than one handling function (tuple[Callable]
), every function will handle the corresponding Exception.
reraise=True - Indicates if the excaption(s) should be reraised. It can be of type bool
or its descendant or tuple[bool]
. If there more than one reraise (tuple[bool]
), every tuple member will raise the corresponding Exception.
Example 1
The following code handles a ZeroDivisionError with classic try/except catching, prints and re-raise the exception:
def print_exception(ex):
print(ex)
def divide_by_zero():
try:
return 1 / 0
except ZeroDivisionError as e:
print_exception(e)
raise
divide_by_zero()
We can simplify divide_by_zero() function by using @ExceptionHandler
decorator:
@ExceptionHandler(exception=ZeroDivisionError, handling_func=print_exception, reraise=True)
def divide_by_zero():
return 1 / 0
The final code:
from exception_handler import ExceptionHandler
def print_exception(ex):
print(ex)
@ExceptionHandler(exception=ZeroDivisionError, handling_func=print_exception, reraise=True)
def divide_by_zero():
return 1 / 0
divide_by_zero()
Example 2
The following code raises randomly one of two custom exceptions:
import random
import logging
class SomeException(Exception):
def __str__(self) -> str:
return "SomeException message"
class SomeOtherException(Exception):
def __str__(self) -> str:
return "SomeOtherException message"
def get_rand_bool():
"""
Returns random boolean value
"""
rand_int = random.getrandbits(1)
return bool(rand_int)
def log_exception(ex):
logging.error(ex)
def print_exception(ex):
print(ex)
def do_something():
if get_rand_bool():
try:
raise SomeException
except SomeException as e:
print_exception(e)
raise
try:
raise SomeOtherException
except SomeOtherException as e:
log_exception(e)
do_something()
We can simplify do_something() function by using @ExceptionHandler
decorator:
@ExceptionHandler(exception=(SomeException, SomeOtherException),
handling_func=(print_exception, log_exception),
reraise=(True,False))
def do_something():
if get_rand_bool():
raise SomeException
raise SomeOtherException
The final code:
import random
from exception_handler import ExceptionHandler
import logging
class SomeException(Exception):
def __str__(self) -> str:
return "SomeException message"
class SomeOtherException(Exception):
def __str__(self) -> str:
return "SomeOtherException message"
def get_rand_bool():
"""
Returns random boolean value
"""
rand_int = random.getrandbits(1)
return bool(rand_int)
def log_exception(ex):
logging.error(ex)
def print_exception(ex):
print(ex)
@ExceptionHandler(exception=(SomeException, SomeOtherException),
handling_func=(print_exception, log_exception),
reraise=(True,False))
def do_something():
if get_rand_bool():
raise SomeException
raise SomeOtherException
do_something()
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
Hashes for exception-handling-decorator-0.1.8.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5c907e5ac2866034f181f11e727c74a4b119cb73de1912e3efc93117ce527da8 |
|
MD5 | 00ba0db4759d3eacd59f2d4648930882 |
|
BLAKE2b-256 | 198b24931ab3c2f6a0a666f96353a8cc2079ed0db541380b1cb37ca41568b7c1 |