在 Python 中列印堆疊跟蹤
Muhammad Waiz Khan
2023年1月30日
在本教程中,我們將研究在 Python 中不停止程式執行的情況下列印堆疊跟蹤的各種方法。
堆疊跟蹤包含特定時間的活動方法呼叫列表。我們可以使用以下方法在 Python 中列印堆疊跟蹤。
在 Python 中使用 traceback
模組列印堆疊跟蹤
traceback
模組提供了在 Python 中提取、格式化和列印堆疊跟蹤的功能。traceback.format_exc()
方法返回一個字串,其中包含有關來自回溯物件的異常和堆疊跟蹤條目的資訊。
我們可以使用 format_exc()
方法通過 try
和 except
語句列印堆疊跟蹤。下面的示例程式碼演示瞭如何使用 Python 中的 traceback.format_exc()
方法列印堆疊跟蹤。
import traceback
import sys
try:
myfunction()
except Exception:
print(traceback.format_exc())
輸出:
Traceback (most recent call last):
File "C:\Test\test.py", line 5, in <module>
myfunction()
NameError: name 'myfunction' is not defined
除了使用 print()
函式,我們還可以使用 logger.debug()
方法來記錄輸出,因為記錄可以使除錯更容易。我們可以通過在以下方法中使用 logger.debug()
方法在 Python 中記錄堆疊跟蹤。
import logging
import traceback
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
try:
myfunction()
except Exception:
logger.debug(traceback.format_exc())
輸出:
DEBUG:__main__:Traceback (most recent call last):
File "C:\Test\test.py", line 8, in <module>
myfunction()
NameError: name 'myfunction' is not defined
在 Python 中使用 logging.exception()
方法列印堆疊跟蹤
我們還可以使用 logging
模組的 logging.exception()
方法來獲取 Python 中的堆疊跟蹤。logging.exception()
方法記錄包含異常資訊的訊息。我們可以通過以下方式使用它在 Python 中列印堆疊跟蹤。
import logging
import traceback
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
try:
myfunction()
except Exception:
logging.info("General exception noted.", exc_info=True)
輸出:
INFO:root:General exception noted.
Traceback (most recent call last):
File "C:\Test\test.py", line 8, in <module>
myfunction()
NameError: name 'myfunction' is not defined