我遇到了一个问题,我在模块上使用AttributeError
时得到getattr()
。错误读起来像这样。
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文件是否存在有关,但这不是问题。
答案 0 :(得分:0)
导入包以使其所有模块可用是不够的。您的inline_import()
函数可能已被调用,名称中的最后一个段是一个模块而不是一个类,例如module.file
而不是module.file.ClassName
。
为避免混淆,请使用:
(例如module.file:ClassName
)分隔模块内的名称。它将明确指出应该导入哪些名称而不查看文件系统。