e.printStackTrace еквівалент у python
У Java це робить наступне ( документи ):
public void printStackTrace()
Друкує цей закидний і його зворотний зв'язок до стандартного потоку помилок ...
Це використовується так:
try
{
// code that may raise an error
}
catch (IOException e)
{
// exception handling
e.printStackTrace();
}
У Java потік стандартних помилок нерозподілений, так що вихід надходить негайно.
Ця ж семантика в Python 2:
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.
Пітон 3
У Python 3 ми можемо отримати прослідкування безпосередньо з об’єкта виключення (який, ймовірно, поводиться краще для потокового коду). Крім того, stderr є буферним рядком , але функція друку отримує флеш-аргумент, тому це буде негайно надруковано на stderr:
print(traceback.format_exception(None, # <- type(e) by docs, but ignored
e, e.__traceback__),
file=sys.stderr, flush=True)
Висновок:
Тому в Python 3, traceback.print_exc()
хоча він використовується sys.stderr
за замовчуванням , буферизується вихід, і ви, можливо, його втратите. Отже, щоб отримати максимально еквівалентну семантику в Python 3, використовуйте print
с flush=True
.
format_exc
натомість ви можете отримати рядок.