Skip to main content

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


Download files

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

Source Distribution

exception-handling-decorator-0.1.8.tar.gz (3.4 kB view details)

Uploaded Source

File details

Details for the file exception-handling-decorator-0.1.8.tar.gz.

File metadata

File hashes

Hashes for exception-handling-decorator-0.1.8.tar.gz
Algorithm Hash digest
SHA256 5c907e5ac2866034f181f11e727c74a4b119cb73de1912e3efc93117ce527da8
MD5 00ba0db4759d3eacd59f2d4648930882
BLAKE2b-256 198b24931ab3c2f6a0a666f96353a8cc2079ed0db541380b1cb37ca41568b7c1

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