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 ...