gpt4 book ai didi

python - 装饰器中丢失的回溯信息

转载 作者:行者123 更新时间:2023-12-01 08:28:32 25 4
gpt4 key购买 nike

运行以下代码时,我无法从装饰器内的 sys.exc_info() 提取的回溯信息中获取预期的行号。

import sys


def get_traceback(function):
def wrapper(*args, **kwargs):
try:
function(*args, **kwargs) # line 7
except:
return sys.exc_info()[2]
return wrapper


def inner():
raise ValueError() # line 14 <--- the expected line number


@get_traceback
def outer():
inner() # line 19


tb = outer()
print(tb.tb_lineno) # prints 7
print(tb.tb_next.tb_lineno) # prints 19

当在装饰器外部对 sys.exc_info() 进行类似调用时,我可以获得适当的行号。这是什么原因,我该怎么做才能获得正确的行号?

提前致谢!

最佳答案

装饰器只是在回溯中添加了另一个步骤。

以下是如何通过 traceback 获取它内置库:

import traceback

tb = outer()

traceback.extract_tb(tb)[-1].lineno

或者在以前的样式中,添加另一个tb_next:

print(tb.tb_next.tb_next.tb_lineno)

关于python - 装饰器中丢失的回溯信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54058982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com