我想要获取所有当前堆栈帧并对每个帧的每个帧f_globals
属性进行一些检查。这与unittest
模块的工作方式非常相似,除了在我的情况下,还没有抛出异常。 traceback.extract_stack()
不允许访问此内容,但在引发异常时sys.exc_info()
会执行此操作。我如何获得所有当前堆栈帧的f_globals属性
4
A
回答
3
只需使用检查模块中的“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__']
“堆栈”功能是缓慢的,但是,要在实际运行的代码用于除设置东西,或者调试的任何其他。如果您需要检查堆栈的某些运行时操作(如获取变量值或其他基于自检的代码),请使用inspect.currentframe()
获取每帧上的当前帧和.f_back
属性以链接到前一帧 - 这足够快。
您不应该使用sys._getframe
,因为如名称开头的下划线所示,它不适合公众使用。
2
current_frame = sys._getframe(0)
然后你可以使用f_back
属性走上堆栈(直到它None
)。
请注意,这是CPython特定的并且被视为实现细节。
相关问题
- 1. 如何获得当前堆栈级别
- 2. madExcept,获得当前堆栈顶部
- 3. 如何获得使用C#的堆栈中的当前索引#
- 4. 获取堆栈帧
- 5. 堆栈帧如何将当前帧的值传递给旧帧(JVM)?
- 6. 如何获得当前帧,使用FFMpeg
- 7. 如何找到当前的堆栈?
- 8. 我怎样才能获得堆栈上当地人和参数的当前值?
- 9. 如何在Visual C++调试器中获取堆栈帧的所有堆栈分配变量的大小?
- 10. 我如何获得所有兄弟姐妹的数据属性?
- 11. 我如何获得GeckoFX/C的所有HTML属性#
- 12. 我如何获得堆叠面板的实际当前高度?
- 13. 获取当前调用堆栈
- 14. 如何获得StackOverflowError的完整堆栈
- 15. 如何在“!htrace -diff”结果中获取堆栈轨迹的所有帧?
- 16. 如何获取当前帧?
- 17. Livecode:保存当前堆栈中的所有导入图像
- 18. 如何获得当前班级所属的班级?
- 19. 如何在OpenGL中获取矩阵堆栈的当前大小?
- 20. 如何获取Python解释器堆栈的当前深度?
- 21. 如何从UINavigationController获取堆栈的当前顶端?
- 22. 堆栈,有界堆栈和Liskov替换属性
- 23. 如何溢出堆栈而不推送新的堆栈帧?
- 24. jquery的,属性选择器,获得当前属性值
- 25. 如何获得堆栈跟踪
- 26. 如何在重定向之前获得堆栈跟踪?
- 27. 如何释放先前堆栈帧的存储器中的Javascript
- 28. 堆栈帧和堆栈指针
- 29. red5:我如何获得当前的IConnection?
- 30. 如何获取当前元素属性