Atrapa excepciones dentro de una clase

¿Es posible escribir un controlador de excepciones para detectar los errores en tiempo de ejecución generados por TODOS los métodos en clase? Puedo hacerlo rodeando a cada uno con 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)

Me pregunto si hay una manera más general de lograr lo mismo, para cualquier error que surja en cualquier parte de la clase. Me gustaría poder acceder a los datos de clase para imprimir información de depuración. Además, ¿cómo obtengo el nombre del método que falla (f1 en el ejemplo)?

Actualizar: gracias a todos por las respuestas escandalosas, la idea del decorador parece ser el camino a seguir. Sobre el riesgo de atrapar TODAS las excepciones: araise declaración en elexcept La rama debería volver a elevar la excepción sin perder ninguna información, ¿no es así? Por eso lo puse en MyError también ...

Respuestas a la pregunta(3)

Su respuesta a la pregunta