obtendo o rastreamento do erro em uma função atexit registrada
Pergunta
Estou tentando registrar o erro que causou o encerramento do meu processo, mas traceback.print_tb
e traceback.print_exc
não parecem perceber qual é o erro gerado.
Em outras palavras, por que o seguinte imprime 'None ' em vez de 'DivisionByZero ..etc..'?(Editar:..e como obtenho acesso ao erro gerado/tratado em exit_fn?)
import traceback, atexit
def exit_fn():
print 'exiting'
if traceback.format_exc().startswith('None'):
print 'why is this None?'
atexit.register(exit_fn)
x = 1/0
Solução
Acredito que, no momento em que sua rotina foi chamada, a exceção já tenha sido 'tratada' (pelo menos quando executo seu código, vejo um traceback mesmo que eu remova sua chamada para imprimir um), de modo que não haja nenhum a ser formatado nesse ponto.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow