在 Python 中列印堆疊跟蹤

Muhammad Waiz Khan 2023年1月30日
  1. 在 Python 中使用 traceback 模組列印堆疊跟蹤
  2. 在 Python 中使用 logging.exception() 方法列印堆疊跟蹤
在 Python 中列印堆疊跟蹤

在本教程中,我們將研究在 Python 中不停止程式執行的情況下列印堆疊跟蹤的各種方法。

堆疊跟蹤包含特定時間的活動方法呼叫列表。我們可以使用以下方法在 Python 中列印堆疊跟蹤。

在 Python 中使用 traceback 模組列印堆疊跟蹤

traceback 模組提供了在 Python 中提取、格式化和列印堆疊跟蹤的功能。traceback.format_exc() 方法返回一個字串,其中包含有關來自回溯物件的異常和堆疊跟蹤條目的資訊。

我們可以使用 format_exc() 方法通過 tryexcept 語句列印堆疊跟蹤。下面的示例程式碼演示瞭如何使用 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