Je sais que print(e)
(où e est une exception) imprime l'exception survenue, mais j'essayais de trouver l'équivalent python de Java e.printStackTrace()
qui trace exactement l'exception jusqu'à quelle ligne elle s'est produite et imprime la trace entière de celle-ci.
Quelqu'un pourrait-il me dire l'équivalent de e.printStackTrace()
Python?
java
python
exception
stack-trace
Koool
la source
la source
format_exc
place obtenir une chaîne.Il y en a aussi
logging.exception
.Production:
(Sur http://blog.tplus1.com/index.php/2007/09/28/the-python-logging-module-is-much-better-than-print-statements/ via Comment imprimer le traçage complet sans interrompre le programme? )
la source
traceback.print_exc()
?En Java, cela fait les choses suivantes ( docs ):
Ceci est utilisé comme ceci:
En Java, le flux d'erreur standard n'est pas mis en mémoire tampon de sorte que la sortie arrive immédiatement.
La même sémantique en Python 2 est:
Python 3
En Python 3, nous pouvons obtenir le traceback directement à partir de l'objet exception (qui se comporte probablement mieux pour le code threadé). De plus, stderr est mis en mémoire tampon , mais la fonction print obtient un argument flush, donc ce serait immédiatement imprimé sur stderr:
Conclusion:
En Python 3, par conséquent,
traceback.print_exc()
bien qu'il utilisesys.stderr
par défaut , il tamponnerait la sortie, et vous pourriez éventuellement la perdre. Donc, pour obtenir la sémantique la plus équivalente possible, en Python 3, utilisezprint
avecflush=True
.la source
Ajout aux autres grandes réponses, nous pouvons utiliser le Python
logging
de la bibliothèquedebug()
,info()
,warning()
,error()
etcritical()
méthodes. Citant des documents pour Python 3.7.4 ,Cela signifie que vous pouvez utiliser la
logging
bibliothèque Python pour générer undebug()
ou un autre type de message, et lalogging
bibliothèque inclura la trace de pile dans sa sortie. Dans cette optique, nous pouvons procéder comme suit:Et il produira:
la source