gpt4 book ai didi

python - 如何访问所有当前堆栈帧的 f_globals 属性

转载 作者:太空狗 更新时间:2023-10-30 02:49:17 26 4
gpt4 key购买 nike

我正在尝试获取所有当前堆栈帧并对每个帧的每个帧 f_globals 属性进行一些检查。这与 unittest 模块的工作方式非常相似,只是在我的例子中,没有抛出异常。 traceback.extract_stack() 不提供对此的访问权限,但 sys.exc_info() 中的框架在抛出异常时提供访问权限。

最佳答案

只需使用检查模块中的“stack”函数即可。

>>> import inspect
>>> inspect.stack()
[(<frame object at 0x02467FE0>, '<stdin>', 1, '<module>', None, None)]

这个调用产生一个列表,其中每个元素都是一个元组,由运行帧和该帧的额外信息组成(根据 Python docs ):

[frame, filename, line number, function name, frame sources, current line index in sources]

检查每个框架对象上的 f_globals:

>>> for frame_tuple in inspect.stack():
... print frame_tuple[0].f_globals.keys()
...
['frame_tuple', '__builtins__', 'inspect', '__package__', '__name__', 'readline', 'rlcompleter', '__doc__']

“stack”功能很慢,但是,除了设置或调试之外,还可以在实际运行的代码中使用。如果您需要检查堆栈以进行某些运行时操作 - 例如获取变量值或其他基于内省(introspection)的代码,请使用 inspect.currentframe() 获取当前帧,以及 .f_back 每个帧上的属性,用于指向前一帧的链接 - 这已经足够快了。

您不应使用 sys._getframe,因为正如名称开头的下划线所示,它不适合公众使用。

关于python - 如何访问所有当前堆栈帧的 f_globals 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9026236/

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