python'da e.printStackTrace eşdeğeri
Java'da bu aşağıdakileri yapar ( dokümanlar ):
public void printStackTrace()
Bu atılabilir ve standart iz akışına olan geri izini yazdırır ...
Bu şu şekilde kullanılır:
try
{
// code that may raise an error
}
catch (IOException e)
{
// exception handling
e.printStackTrace();
}
Java'da, çıktı hemen gelmesi için Standart Hata akışı arabelleğe alınmaz.
Python 2'deki aynı semantik:
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
Python 3'te, izleme işlemini doğrudan istisna nesnesinden alabiliriz (büyük olasılıkla dişli kod için daha iyi davranır). Ayrıca, stderr satır arabelleğe alınır , ancak yazdırma işlevi bir floş argümanı alır, bu nedenle hemen stderr'a yazdırılır:
print(traceback.format_exception(None, # <- type(e) by docs, but ignored
e, e.__traceback__),
file=sys.stderr, flush=True)
Sonuç:
Bu nedenle, Python 3'te, varsayılan olaraktraceback.print_exc()
kullansa da , çıktıyı arabelleğe alır ve muhtemelen kaybedebilirsiniz. Mümkün olduğunca eşdeğer anlambilim elde etmek için Python 3'te ile kullanın .sys.stderr
print
flush=True
format_exc
bunun yerine bir dize alabilirsiniz.