Можно ли написать обработчик исключений, чтобы уловить ошибки во время выполнения, сгенерированные всеми методами класса? Я могу сделать это, окружив каждого из них try/except:
class MyError(Exception):
def __init__(self, obj, method):
print 'Debug info:', repr(obj.data), method.__name__
raise
class MyClass:
def __init__(self, data):
self.data = data
def f1(self):
try:
all method code here, maybe failing at run time
except:
raise MyError(self, self.f1)
Интересно, существует ли более общий способ добиться того же - для любой ошибки, возникающей в любом месте класса. Я хотел бы иметь доступ к данным класса для печати некоторой информации об отладке. Кроме того, как мне получить имя метода отказа (f1 в примере)?
Обновление: благодаря всем, что касается безупречных ответов, идея декоратора выглядит как способ.
О риске захвата ВСЕХ исключений: инструкция raise
в ветке except
должна повторно поднимать исключение, не теряя никакой информации, не так ли? Вот почему я положил его и в MyError...