Имам функция с общо предназначение, която изпраща информация за изключения в регистрационен файл на приложение. Използвам функцията exception_handler
от методите в класовете. Манипулаторът на регистрационния файл на приложението, който се предава и извиква от exception_handler
, създава JSON низ, който всъщност се изпраща към лог файла. Всичко това работи добре.
def exception_handler(log, terminate=False):
exc_type, exc_value, exc_tb = sys.exc_info()
filename, line_num, func_name, text = traceback.extract_tb(exc_tb)[-1]
log.error('{0} Thrown from module: {1} in {2} at line: {3} ({4})'.format(exc_value, filename, func_name, line_num, text))
del (filename, line_num, func_name, text)
if terminate:
sys.exit()
Използвам го, както следва: (хипер опростен пример)
from utils import exception_handler
class Demo1(object):
def __init__(self):
self.log = {a class that implements the application log}
def demo(self, name):
try:
print(name)
except Exception:
exception_handler(self.log, True)
Бих искал да променя exception_handler
за използване като декоратор за голям брой методи, т.е.:
@handle_exceptions
def func1(self, name)
{some code that gets wrapped in a try / except by the decorator}
Прегледах доста статии за декоратори, но все още не съм разбрал как да реализирам това, което искам да направя. Трябва да предам препратка към активния регистрационен обект и също така да предам 0 или повече аргумента към обвитата функция. Ще се радвам да конвертирам exception_handler
в метод в клас, ако това улеснява нещата.