给定一个frame对象,我需要得到相应的module对象。换言之,实现调用者模块以使其正常工作:
import sys
from some_other_module import callers_module
assert sys.modules[__name__] is callers_module()
(这是等价的,因为我可以在函数中为这个测试用例生成一个堆栈跟踪。导入只是为了使该示例完整且可测试,并防止调用者模块使用快捷方式使用u name_uu,因为它位于不同的模块中。)
我尝试过:
^{pr2}$它得到了一个frame对象,在这个对象上f廑code将给我一个code对象,但是我无法找到如何获得相应的模块或它的名称(用于系统模块). 如果我可以得到函数对象,这些对象有一个优module_uu属性(也有代码对象),但是框架中没有这个。实际上,并不是所有的代码对象都属于函数对象,比如我的测试用例的代码(上面的assert)。对于没有模块的frame/code对象也可以这样说,但是很多对象都有,而且在我的例子中,它们会这样做,所以不需要处理;但是,在这种情况下,简单的None或exception也可以。在
感觉我好像错过了一些简单的东西。需要做些什么才能起作用?在
同时inspect.getmodule工作很好,我确实找错了地方,我找到了一个稍微好一点的解决方案:
它仍然在使用检查电流帧(与完全相同的sys.\u getframe相比,我更喜欢它),但它不调用inspect的模块文件名映射(在inspect.getmodule). 在
此外,这个问题启发了一个有趣的方法manage __all__:
^{pr2}$相关问题 更多 >
编程相关推荐