自定义find_module始终使用'fullname'等于None调用

时间:2011-10-19 04:16:47

标签: python import

我正在尝试实施自定义find_moduleload_module方法。 它似乎被调用,但始终调用find_module 全名和路径始终设置为None。 我不明白为什么。

这是程序存根:

class TouchImportLoader:
    def load_module(self, fullname):
        return None

class TouchImportFinder:
    def find_module(self, fullname, path=None):
        #fullname and path seem to be None always, when printed here
        return TouchImportLoader()

sys.meta_path.append(TouchImportFinder)

我用简单的脚本调用它,例如:

import time
print(time.clock())

1 个答案:

答案 0 :(得分:1)

请阅读documentation

  

至少使用要导入的模块的绝对名称调用find_module()方法。如果要导入的模块包含在包中,则父包的__path__属性将作为第二个参数传入。

path参数仅针对包传递。

在您的示例中,您应该获得TypeError

  必须使用find_module()实例作为第一个参数调用

未绑定方法TouchImportFinder(获取str实例)

...因为您要将查找程序添加到meta_path,而不是该类的实例

sys.meta_path.append(TouchImportFinder)

这应该是:

sys.meta_path.append(TouchImportFinder())