traceback.extract_tb 中的 文件名和行号
时间: 2023-12-04 08:07:14 浏览: 32
`traceback.extract_tb` 函数返回的是一个元组列表,每个元组都表示一帧调用堆栈信息。其中,元组的第一个元素是文件名,第二个元素是行号,第三个元素是函数名,第四个元素是代码行。
例如,以下示例代码:
```python
import traceback
def func1():
1/0
def func2():
func1()
try:
func2()
except Exception as e:
tb_list = traceback.extract_tb(e.__traceback__)
for tb in tb_list:
print(tb)
```
当程序执行到 `func1()` 的时候会抛出 `ZeroDivisionError` 异常,然后被 `func2()` 捕获并输出调用堆栈信息。输出结果如下:
```
('test.py', 5, 'func1', ' 1/0\n')
('test.py', 8, 'func2', ' func1()\n')
('test.py', 11, '<module>', ' func2()\n')
```
其中,第一个元组表示 `func1()` 函数在第 5 行出现错误,第二个元组表示 `func2()` 函数在第 8 行调用了 `func1()` 函数,第三个元组表示程序在第 11 行调用了 `func2()` 函数。
相关问题
traceback.extract_tb
`traceback.extract_tb` 是 Python 标准库中 `traceback` 模块提供的一个函数,用于提取异常堆栈信息中的跟踪条目。它接受一个异常对象作为参数,并返回一个列表,其中每个元素代表异常堆栈中的一个跟踪条目。每个跟踪条目是一个四元组,包括文件名、行号、函数名和源代码行。
示例:
```python
import traceback
def func1():
return 1 / 0
def func2():
func1()
try:
func2()
except Exception as e:
tb_list = traceback.extract_tb(e.__traceback__)
for tb in tb_list:
print(tb)
```
运行结果:
```
('D:/test.py', 4, 'func1', 'return 1 / 0')
('D:/test.py', 8, 'func2', 'func1()')
('D:/test.py', 11, '<module>', 'func2()')
```
traceback.extract_tb() 的使用
`traceback.extract_tb()` 是 Python 中的标准库 `traceback` 中的一个函数,用于提取异常堆栈信息中的源代码行信息。
它的用法如下:
```python
import traceback
try:
# 有可能发生异常的代码
except Exception as e:
# 打印异常堆栈信息
traceback.print_exc()
# 或者提取异常堆栈信息的源代码行信息
tb_list = traceback.extract_tb(sys.exc_info()[2])
```
其中,`sys.exc_info()` 返回当前正在处理的异常的相关信息,包括异常类型、异常值、堆栈跟踪对象。`sys.exc_info()[2]` 取出堆栈跟踪对象,然后传入 `traceback.extract_tb()` 中,即可得到一个包含源代码文件名、行号、函数名和代码行内容的元组列表。
返回的元组列表中,每个元组包含四个元素,分别为文件名、行号、函数名和源代码行内容。例如:
```python
[('script.py', 10, '<module>', 'print("Hello, world!")')]
```
表示发生异常的代码在 `script.py` 文件的第 10 行,位于 `<module>` 函数中,该行代码内容为 `print("Hello, world!")`。
使用 `traceback.extract_tb()` 可以帮助我们快速定位异常发生的位置,从而更方便地进行调试和排错。