python内置模块之traceback模块,堆栈信息

本文介绍了Python标准库中的traceback模块,该模块用于处理和格式化堆栈跟踪信息,帮助开发者定位和调试异常。主要讲解了walk_stack、walk_tb、print_tb等函数及其作用,以及FrameSummary和TracebackException类的用法。
摘要由CSDN通过智能技术生成
一、简介

traceback 模块是 Python 标准库中的一个模块,用于提供有关异常的堆栈跟踪信息。当程序发生异常时,traceback 模块可以帮助我们定位异常发生的位置,了解异常是如何传播和被处理的。
堆栈跟踪信息是指在程序执行过程中,每个函数被调用时的调用栈信息,包括函数名、文件名、行号等。堆栈跟踪信息可以帮助我们追踪代码执行的路径,从而更好地理解程序的执行流程。
traceback 模块提供了一系列函数和类,用于处理和格式化堆栈跟踪信息。它可以打印堆栈跟踪信息、格式化异常信息、提取堆栈跟踪信息等操作。通过使用这些函数和类,我们可以获取异常的详细信息,包括异常类型、异常值以及异常发生的位置。
使用 traceback 模块,我们可以更好地理解程序中的异常情况,定位问题的根源,并进行适当的处理和调试。它在开发和调试过程中非常有用,尤其是在处理复杂程序或追踪异常传播路径时。

二、方法
  1. traceback.walk_stack(f):从当前调用栈的顶部开始,向上遍历调用栈,并对每个栈帧执行函数 f。栈帧是指函数调用的上下文信息,包括函数名、文件名、行号等。
  2. traceback.walk_tb(tb):从指定的异常跟踪对象 tb 开始,向上遍历异常跟踪链,并对每个跟踪对象执行操作。
  3. traceback.print_tb(tb, limit, file):打印异常跟踪对象 tb 中的堆栈跟踪信息到指定的文件对象 file 中。limit 参数用于指定打印的堆栈帧数限制。
  4. traceback.clear_frames(tb):清除异常跟踪对象 tb 中的所有堆栈帧信息。
  5. traceback.extract_stack(f, limit):从当前调用栈的顶部开始,提取调用栈信息,并返回一个列表。f 参数用于指定要跳过的帧数。
  6. traceback.extract_tb(tb, limit):从异常跟踪对象 tb 中提取堆栈跟踪信息,并返回一个列表。limit 参数用于指定提取的堆栈帧数限制。
  7. traceback.format_exc(limit, chain):返回当前异常的堆栈跟踪信息的字符串表示。limit 参数用于指定堆栈帧数限制,chain 参数用于控制是否包含内嵌异常的堆栈跟踪信息。
  8. traceback.format_exception(exc, value, tb, limit, chain):返回异常 exc、异常值 value 和异常跟踪对象 tb 的堆栈跟踪信息的字符串表示。limit 参数用于指定堆栈帧数限制,chain 参数用于控制是否包含内嵌异常的堆栈跟踪信息。
  9. traceback.format_exception_only(exc, value):返回异常 exc 和异常值 value 的堆栈跟踪信息的字符串表示。
  10. traceback.format_list(extracted_list):将提取的堆栈跟踪信息列表 extracted_list 格式化为字符串表示。
  11. traceback.format_tb(tb, limit):将异常跟踪对象 tb 中的堆栈跟踪信息格式化为字符串表示。limit 参数用于指定堆栈帧数限制。
  12. traceback.print_exc(limit, file, chain):打印当前异常的堆栈跟踪信息到指定的文件对象 file 中。limit 参数用于指定打印的堆栈帧数限制,chain 参数用于控制是否打印内嵌异常的堆栈跟踪信息。
  13. traceback.print_exception(exc, value=_sentinel, tb, limit, file, chain):打印异常 exc、异常值 value 和异常跟踪对象 tb 的堆栈跟踪信息到指定的文件对象 file 中。limit 参数用于指定打印的堆栈帧数限制,chain 参数用于控制是否打印内嵌异常的堆栈跟踪信息。
  14. traceback.print_last(limit, file, chain):打印最近的异常的堆栈跟踪信息到指定的文件对象 file 中。limit 参数用于指定打印的堆栈帧数限制,chain 参数用于控制是否打印内嵌异常的堆栈跟踪信息。
  15. traceback.print_list(extracted_list, file):将提取的堆栈跟踪信息列表 extracted_list 打印到指定的文件对象 file 中。
  16. traceback.print_stack(f, limit, file):打印当前调用栈的堆栈跟踪信息到指定的文件对象 file 中。limit 参数用于指定打印的堆栈帧数限制。
三、traceback.FrameSummary:单个帧信息
  1. traceback.FrameSummary.name:表示当前帧所在的函数或方法的名称。
  2. traceback.FrameSummary.line:表示当前帧所在的行的源代码。
  3. traceback.FrameSummary.lineno:表示当前帧所在的行号。
  4. traceback.FrameSummary.locals:表示当前帧的本地变量字典。
  5. traceback.FrameSummary.filename:表示当前帧所在的文件名。
  6. traceback.FrameSummary.colno:表示当前帧所在行的列号。
  7. traceback.FrameSummary.end_colno:表示当前帧所在行结束的列号。
  8. traceback.FrameSummary.end_lineno:表示当前帧所在行结束的行号。
四、traceback.TracebackException:用于表示堆栈跟踪信息的异常
  1. traceback.TracebackException.format(chain=True, _ctx):返回格式化的堆栈跟踪信息的字符串表示。chain 参数指定是否包含整个堆栈跟踪链。
  2. traceback.TracebackException.format_exception_only():返回只包含异常类型和异常消息的格式化字符串。
  3. traceback.TracebackException.print(file=None, chain):将格式化的堆栈跟踪信息打印到指定文件中。file 参数指定输出文件,默认为标准输出。chain 参数指定是否包含整个堆栈跟踪链。
  4. traceback.TracebackException.from_exception(exc, *args, **kwargs):根据给定的异常对象创建一个 TracebackException 实例。
  5. traceback.TracebackException.lineno:表示异常发生的行号。
  6. traceback.TracebackException.filename:表示异常发生的文件名。
  7. traceback.TracebackException.stack:表示堆栈跟踪的列表,每个元素都是一个 traceback.FrameSummary 实例。
  8. traceback.TracebackException.text:表示格式化的堆栈跟踪信息的字符串表示。
  9. traceback.TracebackException.exc_type:表示异常的类型。
  10. traceback.TracebackException.msg:表示异常的消息。
  11. traceback.TracebackException.offset:表示异常发生的偏移量。
五、traceback.StackSummary:用于表示堆栈跟踪信息的摘要
  1. traceback.StackSummary.format():返回格式化的堆栈跟踪信息的字符串表示。
  2. traceback.StackSummary.from_list(a_list):根据给定的堆栈跟踪列表创建一个 StackSummary 实例。
  3. traceback.StackSummary.extract(frame_gen, limit=None, lookup_lines=True, capture_locals):从一个帧生成器中提取堆栈跟踪信息,并创建一个 StackSummary 实例。limit 参数指定最大提取的帧数。lookup_lines 参数指定是否查找源代码行。capture_locals 参数指定是否捕获本地变量。
  4. traceback.StackSummary.format_frame_summary(frame_summary):返回给定 traceback.FrameSummary 实例的格式化字符串表示。
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值