Поймать исключения внутри класса

Можно ли написать обработчик исключений для перехвата ошибок времени выполнения, генерируемых ВСЕМИ методами в классе? Я могу сделать это, окружив каждого с помощью try / кроме:

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 в примере)?

UpdateСпасибо всем за глубокие ответы, идея декоратора выглядит как путь. О риске перехвата ВСЕХ исключений:raise заявление вexcept ветвь должна повторно вызвать исключение, не теряя никакой информации, не так ли? Вот почему я также поместил его в MyError ...

Ответы на вопрос(3)

Ваш ответ на вопрос