gpt4 book ai didi

python - 如何从回溯中获取函数和模块名称?

转载 作者:行者123 更新时间:2023-12-05 03:12:26 24 4
gpt4 key购买 nike

我正在尝试从回溯中提取信息,但出现错误。

我想去掉下面示例代码中的 call 变量。我想搜索回溯并获取被调用的套接字模块函数的名称。我该怎么做?

try:
sock = None
call = "socket"
sock = socket.socket(family, stype)
call = "setsockopt"
set_my_options():
call = "connect"
sock.connect(addr)
except OSError as err:
if sock is not None:
sock.close()
# call = name of the failed socket.XXX() call
raise RPCError("{} failed".format(call))

我尝试从(仅限 Python3)开始:

stack = traceback.extract_stack(err.__traceback__)

或(Python2 和 Python3)

stack = traceback.extract_stack(sys.exc_info()[2])

但是得到了:

AttributeError: 'traceback' object has no attribute 'f_lineno'


编辑1:

在修复了被忽视的错误之后,这就是我现在拥有的:

    ....
except OSError as err:
tb = traceback.extract_tb(err.__traceback__)
for tb_entry in reversed(tb):
if tb_entry[0] == __file__:
failed = tb_entry[3]
break
....

它提取执行代码仍在当前文件中的最后一个回溯条目。外部模块的内部结构不会很有帮助。结果是一行代码,例如sock.connect(addr)。不完全是我想要的,但接近。

最佳答案

通过这种方式可以获取函数名和函数所在的模块名。

import traceback

def func():
try:
# My code
except Exception as e:
stack = traceback.extract_stack()
(filename, line, procname, text) = stack[-1]
print procname # function name
print filename # module name

关于python - 如何从回溯中获取函数和模块名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33873417/

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