e.printStackTrace odpowiednik w pythonie
W Javie wykonuje to następujące czynności ( dokumenty ):
public void printStackTrace()
Drukuje ten możliwy do rzucania i jego ślad do standardowego strumienia błędów ...
Jest to używane w następujący sposób:
try
{
// code that may raise an error
}
catch (IOException e)
{
// exception handling
e.printStackTrace();
}
W Javie strumień błędu standardowego nie jest buforowany, więc dane wyjściowe są dostarczane natychmiast.
Ta sama semantyka w Pythonie 2 to:
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
W Pythonie 3 możemy uzyskać śledzenie bezpośrednio z obiektu wyjątku (który prawdopodobnie lepiej zachowuje się w przypadku kodu wątkowego). Ponadto, stderr jest buforowany w linii , ale funkcja print otrzymuje argument opróżnienia, więc zostanie on natychmiast wydrukowany do stderr:
print(traceback.format_exception(None, # <- type(e) by docs, but ignored
e, e.__traceback__),
file=sys.stderr, flush=True)
Wniosek:
Dlatego w Pythonie 3, traceback.print_exc()
chociaż używa sys.stderr
domyślnie , buforowałby dane wyjściowe i możliwe, że je utracisz. Tak, aby uzyskać jak równoważnych semantyki, jak to możliwe, w Pythonie 3, korzystać print
z flush=True
.
format_exc
zamiast tego uzyskać ciąg.