Eu sei disso print(e)
(onde e é uma exceção) imprime a exceção ocorrida, mas eu estava tentando encontrar o equivalente python do Java e.printStackTrace()
que rastreia exatamente a exceção para qual linha ocorreu e imprime todo o rastreio dela.
Alguém poderia me dizer o equivalente e.printStackTrace()
em Python?
java
python
exception
stack-trace
koool
fonte
fonte
format_exc
obter uma sequência.Há também
logging.exception
.Resultado:
(Em http://blog.tplus1.com/index.php/2007/09/28/the-python-logging-module-is-much-better-than-print-statements/ via Como imprimir o rastreamento completo sem interromper o programa? )
fonte
traceback.print_exc()
?Em Java, isso faz o seguinte ( docs ):
Isso é usado assim:
Em Java, o fluxo de erro padrão é sem buffer, para que a saída chegue imediatamente.
As mesmas semânticas no Python 2 são:
Python 3
No Python 3, podemos obter o traceback diretamente do objeto de exceção (que provavelmente se comporta melhor para o código encadeado). Além disso, o stderr possui buffer de linha , mas a função print recebe um argumento de liberação, portanto isso seria imediatamente impresso no stderr:
Conclusão:
Portanto, no Python 3,
traceback.print_exc()
embora seja usadosys.stderr
por padrão , o buffer será armazenado em buffer e você poderá perdê-lo. Portanto, para obter a semântica o mais equivalente possível, no Python 3, useprint
comflush=True
.fonte
Somando-se os outros grandes respostas, podemos usar o Python
logging
da bibliotecadebug()
,info()
,warning()
,error()
, ecritical()
métodos. Citando os documentos para Python 3.7.4 ,O que isso significa é que você pode usar a
logging
biblioteca Python para gerar umadebug()
ou outro tipo de mensagem, e alogging
biblioteca incluirá o rastreamento de pilha em sua saída. Com isso em mente, podemos fazer o seguinte:E isso irá gerar:
fonte