tương đương e.printStackTrace trong python
Trong Java, điều này thực hiện như sau ( tài liệu ):
public void printStackTrace()
In cái có thể ném này và backtrace của nó vào luồng lỗi tiêu chuẩn ...
Điều này được sử dụng như thế này:
try
{
// code that may raise an error
}
catch (IOException e)
{
// exception handling
e.printStackTrace();
}
Trong Java, luồng Lỗi tiêu chuẩn không được xử lý để đầu ra đến ngay lập tức.
Các ngữ nghĩa tương tự trong Python 2 là:
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.
Con trăn 3
Trong Python 3, chúng ta có thể nhận được truy nguyên trực tiếp từ đối tượng ngoại lệ (có khả năng hoạt động tốt hơn đối với mã luồng). Ngoài ra, stderr được đệm dòng , nhưng chức năng in nhận được một đối số tuôn ra, do đó, điều này sẽ được in ngay lập tức thành stderr:
print(traceback.format_exception(None, # <- type(e) by docs, but ignored
e, e.__traceback__),
file=sys.stderr, flush=True)
Phần kết luận:
Do đó, trong Python 3, traceback.print_exc()
mặc dù nó sử dụng sys.stderr
theo mặc định , sẽ đệm đầu ra và bạn có thể mất nó. Vì vậy, để có được ngữ nghĩa tương đương nhất có thể, trong Python 3, hãy sử dụng print
với flush=True
.
format_exc
thay vào đó bạn có thể lấy một chuỗi.