e.printStackTrace เทียบเท่าในหลาม
ใน Java สิ่งนี้ดำเนินการดังต่อไปนี้ ( เอกสาร ):
public void printStackTrace()
พิมพ์ Throwable นี้และ backtrace ไปยังสตรีมข้อผิดพลาดมาตรฐาน ...
มันถูกใช้แบบนี้:
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.
Python 3
ใน Python 3 เราสามารถรับการติดตามกลับได้โดยตรงจากอ็อบเจกต์ข้อยกเว้น (ซึ่งน่าจะทำงานได้ดีกว่าสำหรับเธรดโค้ด) นอกจากนี้stderr จะถูก line-bufferedแต่ฟังก์ชันการพิมพ์จะได้รับข้อโต้แย้งแบบฟลัชดังนั้นสิ่งนี้จะถูกพิมพ์ไปยัง 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
ค่าเริ่มต้นแต่จะบัฟเฟอร์เอาต์พุตและคุณอาจสูญเสียมันไป ดังนั้นเพื่อให้ได้เป็นความหมายเทียบเท่าที่เป็นไปได้ในหลาม 3 ใช้กับprint
flush=True
format_exc
รับสตริงแทนได้