目录
1. traceback 模块概述
2.捕获和记录异常
3.traceback 模块的函数
3.1 traceback.format_exc()
3.2 traceback.format_exception(etype, value, tb)
3.3 traceback.print_exc()
3.4 traceback.extract_tb(tb)
1.
traceback
模块概述
traceback
模块提供了多种函数,用于提取、格式化和打印异常的回溯信息。异常的回溯信息是指当程序发生异常时,Python 解释器记录的调用堆栈信息,包括异常发生的位置、调用链以及每一层的具体代码。常用功能:
traceback.format_exc()
:返回格式化的异常信息字符串。traceback.format_exception()
:返回异常信息的列表,其中每个元素是格式化的错误消息。traceback.print_exc()
:将格式化的异常信息输出到标准错误流(stderr)。traceback.extract_tb()
:从 traceback 对象中提取出回溯信息。traceback.format_tb()
:格式化 traceback 对象中的回溯信息。2.捕获和记录异常
用
traceback
模块来捕获异常并生成详细的日志信息。import traceback import logging # 配置 logging 模块 logging.basicConfig(filename='app.log', level=logging.ERROR) try: # 故意引发一个异常 result = 1 / 0 except Exception as e: # 捕获异常信息 exc_type, exc_value, exc_traceback = sys.exc_info() # 获取格式化的异常信息 formatted_exception = traceback.format_exc() # 打印异常信息 print(formatted_exception) # 将异常信息写入日志文件 logging.error("An error occurred:\n%s", formatted_exception)
3.traceback
模块的函数3.1
traceback.format_exc()
返回一个字符串,包含详细的异常信息和回溯信息。
import traceback try: 1 / 0 except Exception: print(traceback.format_exc())
打印结果:
Traceback (most recent call last): File "/Users/1.py", line 4, in <module> 1 / 0 ZeroDivisionError: division by zero
3.2
traceback.format_exception(etype, value, tb)
返回一个格式化异常信息的列表,其中每个元素都是一个格式化的字符串。
import traceback import sys try: 1 / 0 except Exception: exc_type, exc_value, exc_traceback = sys.exc_info() formatted_exception = traceback.format_exception(exc_type, exc_value, exc_traceback) print(''.join(formatted_exception)) print(exc_type) print(exc_value) print(exc_traceback)
打印结果:
Traceback (most recent call last): File "/Users/1.py", line 5, in <module> 1 / 0 ZeroDivisionError: division by zero <class 'ZeroDivisionError'> division by zero <traceback object at 0x7fda012ab410>
3.3
traceback.print_exc()
直接将格式化的异常信息打印到标准错误流(stderr)。
import traceback try: 1 / 0 except Exception: traceback.print_exc()
打印结果:
3.4
traceback.extract_tb(tb)
提取 traceback 对象中的回溯信息,返回一个
FrameSummary
对象的列表。import traceback import sys try: 1 / 0 except Exception: exc_type, exc_value, exc_traceback = sys.exc_info() for frame in traceback.extract_tb(exc_traceback): print(frame)
打印结果:
<FrameSummary file /Users/1.py, line 5 in <module>>
3.5
traceback.format_tb(tb)
将 traceback 对象中的回溯信息格式化为字符串列表。
import traceback import sys try: 1 / 0 except Exception: exc_type, exc_value, exc_traceback = sys.exc_info() formatted_tb = traceback.format_tb(exc_traceback) print(formatted_tb) print(''.join(formatted_tb))
打印结果:
[' File "/Users/1.py", line 5, in <module>\n 1 / 0\n'] File "/Users/1.py", line 5, in <module> 1 / 0