Python 自动加载子模块时发生NameError
我的包结构如下: 然后,为了自动加载子模块Python 自动加载子模块时发生NameError,python,python-3.5,Python,Python 3.5,我的包结构如下: 然后,为了自动加载子模块echo和reverse,我将以下导入语句添加到我的effects/\uuuu init\uuuuu.py文件中 from . import echo from . import reverse 但是,在导入sound.effects之后,在尝试访问echo和reverse时,我仍然有一个名称错误: >>> import sound.effects >>> echo Traceback (most recent ca
echo
和reverse
,我将以下导入语句添加到我的effects/\uuuu init\uuuuu.py
文件中
from . import echo
from . import reverse
但是,在导入sound.effects之后,在尝试访问echo
和reverse
时,我仍然有一个名称错误:
>>> import sound.effects
>>> echo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'echo' is not defined
>>> reverse
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'reverse' is not defined
>>导入声音效果
>>>回音
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
名称错误:未定义名称“echo”
>>>逆转
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“reverse”
我错过什么了吗?是的。您导入了sound.effects
,但这不会将effects
的内容带入当前名称空间。您仍然需要在它们所在的位置引用它们:sound.effects.echo
和sound.effects.reverse
如果只想按名称引用这些名称,则需要导入这些名称:
from sound.effects import echo, reverse
对。您导入了sound.effects
,但这不会将effects
的内容带入当前名称空间。您仍然需要在它们所在的位置引用它们:sound.effects.echo
和sound.effects.reverse
如果只想按名称引用这些名称,则需要导入这些名称:
from sound.effects import echo, reverse
基本上,Python名称空间就是这样工作的
添加:
from . import echo
Toeffect/\uuuuu init\uuuuuuupy
将名称echo
导入effect
命名空间。导入模块时,它会执行模块代码,但在模块名称空间中,而不是在主程序名称空间中
在您的示例中,您可以通过sound.effect.echo
访问echo,甚至可以通过以下方式导入它(在主文件中):
基本上,Python名称空间就是这样工作的
添加:
from . import echo
Toeffect/\uuuuu init\uuuuuuupy
将名称echo
导入effect
命名空间。导入模块时,它会执行模块代码,但在模块名称空间中,而不是在主程序名称空间中
在您的示例中,您可以通过sound.effect.echo
访问echo,甚至可以通过以下方式导入它(在主文件中):
也许我不够清楚。我知道我可以像那样导入它们,但我想利用这样一个事实,即可以使用\uuuu init\uuuu.py
来执行初始化代码不,您已经非常清楚了。然后您将这些名称导入到\uuuu init\uuuuu.py
中。但这并不能使它们在其他任何地方都可用。这就是Python的工作原理。也许我还不够清楚。我知道我可以像那样导入它们,但我想利用这样一个事实,即可以使用\uuuu init\uuuu.py
来执行初始化代码不,您已经非常清楚了。然后您将这些名称导入到\uuuu init\uuuuu.py
中。但这并不能使它们在其他任何地方都可用。这就是Python的工作原理。