Złap wyjątki w klasie

Czy można napisać program obsługi wyjątków, aby przechwycić błędy czasu wykonywania generowane przez WSZYSTKIE metody w klasie? Mogę to zrobić, otaczając każdą z nich za pomocą 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)

Zastanawiam się, czy istnieje bardziej ogólny sposób osiągnięcia tego samego - dla jakiegokolwiek błędu podnoszącego gdziekolwiek w klasie. Chciałbym mieć dostęp do danych klasy, aby wydrukować niektóre informacje debugowania. Ponadto, w jaki sposób uzyskać błędną nazwę metody (w przykładzie f1)?

Aktualizacja: dzięki wszystkim za wnikliwe odpowiedzi, pomysł dekoratora wygląda jak droga do wyjścia. O ryzyku uwięzienia WSZYSTKICH wyjątków: araise oświadczenie wexcept oddział powinien ponownie zgłosić wyjątek bez utraty jakichkolwiek informacji, prawda? Dlatego umieściłem go w MyError także ...

questionAnswers(3)

yourAnswerToTheQuestion