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)