Python中的特殊导入案例

时间:2014-07-23 20:02:41

标签: python python-2.7 python-import

我在python2.7中观察到了一个未被发现的(imo)行为。程序结构如下所示:

run.py
package/
    __init__.py
    a.py
    b.py

run.py:

from package import *

初始化的.py:

from package.a import *

现在将a.pyb.py视为空文件。

在我看来,这个程序应该通过循环导入失败。为什么?因为当我们导入package init文件时,绝对导入会导致在导入时访问相同的init文件。

要查看我的情况除外,只需添加到a.py这个:

from package.b import *

结果我们收到一个ImportError。

这是一个错误,还是例外行为?我在文档中找不到任何关于 init 文件中特殊处理的绝对导入的信息?

1 个答案:

答案 0 :(得分:0)

我只是试图重现相同的情况,我意识到在我发帖的那天,我非常疲惫。问题无效:)。你们这是对的,这与绝对进口无关。

导入时,

__init__.py仅像任何其他模块一样加载,这是例外行为。因此,如果我在from package.a import * __init__.py中有__init__.py这样的语句已经在sys.modules中(名称继承自文件夹,在本例中为package),那么没有再加载。

仅当我们尝试使用未初始化的模块中的变量时,才会发生循环异常。因此,例如,如果我输入a.py from package import *解释器将终止,因为__init__未完全初始化。