Pegue exceções dentro de uma classe

É possível escrever um manipulador de exceção para capturar os erros de tempo de execução gerados por todos os métodos na classe? Eu posso fazer isso envolvendo cada um com try / exceto:

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)

Eu me pergunto se existe uma maneira mais geral de alcançar o mesmo - para qualquer erro levantado em qualquer lugar da classe. Gostaria de poder acessar os dados da classe para imprimir algumas informações de depuração. Além disso, como obtenho o nome do método com falha (f1 no exemplo)?

Atualizar: obrigado a todos pelas respostas, a ideia do decorador parece ser o caminho a percorrer. Sobre o risco de capturar TODAS as exceções:raise declaração noexcept filial deve re-aumentar a exceção sem perder qualquer informação, não é? É por isso que eu coloquei no MyError também ...

questionAnswers(3)

yourAnswerToTheQuestion