traceback追踪异常

traceback 是 Python 标准库中的一个模块,提供了一些有用的函数来追踪和输出异常信息,帮助程序员调试和定位问题。以下是一些常用的 traceback 函数及其用法:


import traceback
# 获取当前命令行数
current_line = traceback.extract_stack()[-1].lineno
# 输出当前命令行数
print("当前命令行数:", current_line)

traceback.extract_stack()[-1].lineno 可以获取当前命令行数,[-1] 表示获取最后一个栈帧,也就是当前栈帧,.lineno 表示获取该栈帧所在行数。
以上代码可以在任意位置调用,输出当前代码行数,方便调试和定位问题
traceback.print_tb(tb[, limit[, file]])
输出当前堆栈信息,可选的 limit 参数用于控制输出的堆栈层数,file 参数用于指定输出流,默认为标准错误流。


import traceback

try:
    # some code that may raise an exception
    ...
except Exception as e:
    # print traceback information
    traceback.print_tb(e.__traceback__)

traceback.format_tb(tb[, limit])
返回当前堆栈信息的字符串表示,可选的 limit 参数用于控制输出的堆栈层数。


import traceback

try:
    # some code that may raise an exception
    ...
except Exception as e:
    # format and save traceback information to a file
    tb_str = traceback.format_tb(e.__traceback__)
    with open('traceback.txt', 'w') as f:
        f.write(''.join(tb_str))

traceback.print_exception(etype, value, tb[, limit[, file[, chain]]])
输出异常信息和当前堆栈信息,可选的 limit 参数用于控制输出的堆栈层数,file 参数用于指定输出流,默认为标准错误流,chain 参数用于控制是否输出被嵌套的异常信息,默认为 True。


import traceback

try:
    # some code that may raise an exception
    ...
except Exception as e:
    # print exception and traceback information
    traceback.print_exception(type(e), e, e.__traceback__)

traceback.format_exception(etype, value, tb[, limit[, chain]])
返回异常信息和当前堆栈信息的字符串表示,可选的 limit 参数用于控制输出的堆栈层数,chain 参数用于控制是否输出被嵌套的异常信息,默认为 True。


import traceback

try:
    # some code that may raise an exception
    ...
except Exception as e:
    # format and save exception and traceback information to a file
    exc_str = traceback.format_exception(type(e), e, e.__traceback__)
    with open('exception.txt', 'w') as f:
        f.write(''.join(exc_str))

traceback.extract_tb(tb[, limit])
返回当前堆栈信息对应的栈帧列表,每个栈帧包含文件名、行数、函数名和代码行。


import traceback

try:
    # some code that may raise an exception
    ...
except Exception as e:
    # print the source code of each frame in the traceback
    for frame in traceback.extract_tb(e.__traceback__):
        print(frame.filename, frame.lineno, frame.name, frame.line)

  目录