在 Python 中打印堆栈跟踪
Muhammad Waiz Khan
2023年1月30日
2022年5月17日
在本教程中,我们将研究在 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