Source code for cptree.exception_handler
"""
ehandler
well-behaved exception handler for python cli commands
"""
import sys
from traceback import format_exception
[docs]
def exception_handler(
exception_type,
exception,
traceback,
debug_hook=sys.excepthook,
):
logger = ExceptionHandler.logger
elist = format_exception(exception_type, exception, traceback)
traceback_msg = "".join(elist[:-1]).rstrip("\n")
error_msg = elist[-1].rstrip("\n")
if logger:
logger.debug(traceback_msg)
logger.error(error_msg)
if ExceptionHandler.debug:
debug_hook(
exception_type,
exception,
traceback,
)
elif not logger:
print(
f"{exception.__class__.__name__}: {str(exception)}",
file=sys.stderr,
end="\n",
flush=True,
)
sys.exit(-1)
[docs]
class ExceptionHandler:
installed = False
debug = None
logger = None
def __init__(self, debug=False, logger=False):
self.__class__.debug = debug
self.__class__.logger = logger
if not self.installed:
sys.excepthook = exception_handler
self.__class__.installed = True