在运行时,Python 代码获取要加载的子模块的名称,这是我以前不知道的。现在,我想检查这个子模块是否存在于现有模块中。考虑这个结构,其中foo
和bar
可以指定:
master/
|
|- __init__.py
|
|- foo/
| |
| |- __init__.py
|
|- bar/
|
|- __init__.py
现在,通常我会这样做,它适用于 defs 和变量:
import master
unknown_submodule = "foo"
if hasattr(master, unknown_submodule):
pass # all's well
或者我正在捕获 AttributeError,它同样有效。
但是,使用上述文件结构,我无法启动并使用这种方法。hasattr()
始终返回 False(即,始终抛出 AttributeError)。
如果我查看dir(master)
,我会看到以下输出:
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
甚至明确指定__all__
inmaster/__init__.py
也无济于事,而是将 dir() 更改为
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
任何想法,我做错了什么,或者是否有办法实现这些测试?(顺便说一句:Win/Cygwin 上的 Python 2.6,如果有兴趣的话)