python3 使用traceback定位异常实例

  • Post category:Python

下面就是使用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 来快速定位异常实例并进行调试。