มาสร้างสแต็คเทรซที่ซับซ้อนอย่างเหมาะสมเพื่อแสดงให้เห็นว่าเราได้สแต็คเต็มรูปแบบ:
def raise_error():
raise RuntimeError('something bad happened!')
def do_something_that_might_error():
raise_error()
การบันทึกสแต็คเต็มรูปแบบ
วิธีปฏิบัติที่ดีที่สุดคือการตั้งค่าตัวบันทึกสำหรับโมดูลของคุณ มันจะรู้ชื่อของโมดูลและสามารถเปลี่ยนระดับได้ (ระหว่างคุณสมบัติอื่น ๆ เช่นตัวจัดการ)
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
และเราสามารถใช้ตัวบันทึกนี้เพื่อรับข้อผิดพลาด:
try:
do_something_that_might_error()
except Exception as error:
logger.exception(error)
ไฟล์บันทึกใด:
ERROR:__main__:something bad happened!
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
ดังนั้นเราจึงได้ผลลัพธ์เช่นเดียวกับเมื่อเรามีข้อผิดพลาด:
>>> do_something_that_might_error()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
รับเพียงสตริง
หากคุณต้องการสตริงจริงๆให้ใช้traceback.format_exc
ฟังก์ชันแทนเพื่อสาธิตการบันทึกสตริงที่นี่:
import traceback
try:
do_something_that_might_error()
except Exception as error:
just_the_string = traceback.format_exc()
logger.debug(just_the_string)
ไฟล์บันทึกใด:
DEBUG:__main__:Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
log_error(err)
ฟังก์ชั่น