繁体   English   中英

目录/模块上的__import__是否不返回所有文件/子模块?

[英]__import__ on a directory/module is not returning all the files/sub-modules?

我遇到了在模块上使用getattr()时出现AttributeError的问题。 该错误显示如下内容。

File "/some_app/some_module/some_file.py", line 6, in inline_import
    cls = getattr(cls, package)
AttributeError: 'module' object has no attribute 'fileThatIsInDirectory'

关键是文件实际上在那里,但是当我在模块上打印__dict__.keys()时,它缺少了几个模块,包括我要获取的模块。 该目录目前包含约53个.py文件,但模块上只有24个属性。

所有包含.py文件的目录都包含一个空的__init__.py文件。

这是一些有问题的代码的示例。

def inline_import(class_path):
    package_path = class_path.split('.')
    cls = __import__(class_path.rsplit('.', 1)[0])
    package_path.pop(0)
    for package in package_path:
        cls = getattr(cls, package)
    return cls

您可以通过传递要导入的类的类路径来使用它,例如'module.file.ClassName'

我认为这可能与是否存在.pyc文件有关,但这不是问题。

导入软件包以使其所有模块可用都是不够的。 您的inline_import()函数可能已被调用,名称中的最后一个段是模块而不是类,例如, module.file而不是module.file.ClassName

为了避免混淆,请使用以下命令来分隔模块内部的名称:例如module.file:ClassName 无需查看文件系统,就可以清楚地知道应导入哪些名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM