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
Foi útil?

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
scroll top