在 Python 中打印堆栈跟踪

Muhammad Waiz Khan 2023年1月30日 2022年5月17日
  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