下面就是使用traceback定位异常实例的完整攻略:
1. traceback简介
traceback
是 Python 内置的一个标准库,提供了访问和操作错误栈的接口,可以帮助程序员定位代码出现异常的位置。
2. traceback常用方法
2.1 traceback.print_exc()
该方法将错误信息输出到标准错误输出流(standard error stream),不需要捕获异常,可直接使用。
import traceback
try:
a = 1 / 0
except Exception as e:
traceback.print_exc()
运行以上代码,会输出以下错误信息:
Traceback (most recent call last):
File "test.py", line 4, in <module>
a = 1 / 0
ZeroDivisionError: division by zero
2.2 traceback.format_exc()
该方法将错误信息以字符串形式返回,不需要捕获异常,可直接使用。
import traceback
try:
a = 1 / 0
except Exception as e:
err_msg = traceback.format_exc()
print(err_msg)
运行以上代码,会输出以下错误信息:
Traceback (most recent call last):
File "test.py", line 4, in <module>
a = 1 / 0
ZeroDivisionError: division by zero
2.3 traceback.extract_tb()
该方法返回异常栈信息列表,在捕获到异常异常时,可通过获取异常信息得到出错的代码行数、函数名等。
import traceback
def func():
a = 1 / 0
try:
func()
except Exception as e:
err_tb = traceback.extract_tb(e.__traceback__)
for tb in err_tb:
print(tb.filename, tb.line, tb.name)
运行以上代码,会输出以下异常栈信息:
test.py 5 func
test.py 9 <module>
3. 实例分析
3.1 查看路径
我们通过查看路径的方式来定位异常实例。
import traceback
try:
a = 1 / 0
except Exception as e:
traceback.print_exc()
运行以上代码,会输出以下错误信息:
Traceback (most recent call last):
File "test.py", line 4, in <module>
a = 1 / 0
ZeroDivisionError: division by zero
从报错信息可以看出,代码异常是发生在 “test.py” 文件的第 4 行。
3.2 查看具体的函数
当代码比较复杂时,直接查看路径并不能得到具体的函数名称,这时候我们可以通过extract_tb
函数来获取异常栈信息列表,从而获取函数名称。
import traceback
def func():
a = 1 / 0
try:
func()
except Exception as e:
err_tb = traceback.extract_tb(e.__traceback__)
for tb in err_tb:
print(tb.filename, tb.line, tb.name)
运行以上代码,会输出以下异常栈信息:
test.py 5 func
test.py 9 <module>
可以看出,出错的函数就是func()
函数。
4. 总结
以上就是使用traceback
定位异常实例的完整攻略,其中包括了常用的三个方法和两个实例分析。我们可以通过使用 traceback
来快速定位异常实例并进行调试。