e.printStackTrace equivalente in python
In Java, questo fa quanto segue ( documenti ):
public void printStackTrace()
Stampa questo oggetto lanciabile e il suo backtrace nel flusso di errore standard ...
Questo è usato in questo modo:
try
{
}
catch (IOException e)
{
e.printStackTrace();
}
In Java, il flusso di errore standard non è bufferizzato in modo che l'output arrivi immediatamente.
La stessa semantica in Python 2 è:
import traceback
import sys
try:
pass
except IOError as e:
print >> sys.stderr, traceback.format_exc()
print(traceback.format_exc(), file=sys.stderr)
traceback.print_exc()
Python 3
In Python 3, possiamo ottenere il traceback direttamente dall'oggetto eccezione (che probabilmente si comporta meglio per il codice a thread). Inoltre, stderr è con buffer di riga , ma la funzione di stampa ottiene un argomento flush, quindi questo verrà immediatamente stampato su stderr:
print(traceback.format_exception(None, # <- type(e) by docs, but ignored
e, e.__traceback__),
file=sys.stderr, flush=True)
Conclusione:
In Python 3, quindi, traceback.print_exc()
sebbene utilizzi sys.stderr
di default , bufferizzerebbe l'output e potresti perderlo. Quindi, per ottenere la semantica più equivalente possibile, in Python 3, usa print
con flush=True
.
format_exc
invece ottenere una stringa.