e.printStackTrace setara dengan python
Di Jawa, ini melakukan yang berikut ( dokumen ):
public void printStackTrace()
Mencetak throwable ini dan backtrace ke aliran kesalahan standar ...
Ini digunakan seperti ini:
try
{
// code that may raise an error
}
catch (IOException e)
{
// exception handling
e.printStackTrace();
}
Di Jawa, aliran Kesalahan Standar tidak dibatalkan sehingga output segera tiba.
Semantik yang sama dalam Python 2 adalah:
import traceback
import sys
try: # code that may raise an error
pass
except IOError as e: # exception handling
# in Python 2, stderr is also unbuffered
print >> sys.stderr, traceback.format_exc()
# in Python 2, you can also from __future__ import print_function
print(traceback.format_exc(), file=sys.stderr)
# or as the top answer here demonstrates, use:
traceback.print_exc()
# which also uses stderr.
Python 3
Dalam Python 3, kita bisa mendapatkan traceback langsung dari objek pengecualian (yang mungkin berperilaku lebih baik untuk kode ulir). Juga, stderr adalah buffer-line , tetapi fungsi cetak mendapat argumen flush, jadi ini akan segera dicetak ke stderr:
print(traceback.format_exception(None, # <- type(e) by docs, but ignored
e, e.__traceback__),
file=sys.stderr, flush=True)
Kesimpulan:
Dalam Python 3, oleh karena itu, traceback.print_exc()
meskipun digunakan sys.stderr
secara default , akan buffer output, dan Anda mungkin kehilangan itu. Jadi untuk mendapatkan semantik yang sederajat mungkin, dengan Python 3, gunakan print
dengan flush=True
.
format_exc
mendapatkan string.