导入目录时出现奇怪的属性错误
Wierd attribute error with importing into directories
我有一个目录树如下:
main.py
dir1
sub1.py
sub2.py
在main.py
中:
import dir1.sub1
在dir1/sub1.py
中:
def f1() -> None:
print("f1")
import dir1.sub2
dir1.sub2.f2()
在dir1/sub2.py
中:
import dir1.sub1
def f2() -> None:
dir1.sub1.f1()
print("f2")
当我 运行 main.py
时,我收到以下错误消息:
Traceback (most recent call last):
File "...\main.py", line 1, in <module>
import dir1.sub1
File "...\dir1\sub1.py", line 7, in <module>
dir1.sub2.f2()
File "...\dir1\sub2.py", line 5, in f2
dir1.sub1.f1()
AttributeError: module 'dir1' has no attribute 'sub1'. Did you mean: 'sub2'?
(其中文件路径开头的...
是我的工作目录。)
如果我把main.py
改成
import dir1.sub2
我收到一条略有不同的错误消息:
Traceback (most recent call last):
File "...\main.py", line 1, in <module>
import dir1.sub2
File "...\dir1\sub2.py", line 1, in <module>
import dir1.sub1
File "...\dir1\sub1.py", line 7, in <module>
dir1.sub2.f2()
AttributeError: module 'dir1' has no attribute 'sub2'
如果我将 sub1.py
和 sub2.py
移动到与 main.py
相同的目录并根据需要重新定向导入,我将得到
的预期输出
f1
f2
为什么会发生这种情况,我怎样才能让它不发生?
您需要使用绝对导入,因为 Python 3 只支持它。在 Python 2 中,您的方法将起作用。例如,如果您有 import dir1.sub2
,请将其更改为 from dir1 import sub2
。参见 here。
注意:我已经使用您的设置对其进行了测试并且它有效。
我有一个目录树如下:
main.py
dir1
sub1.py
sub2.py
在main.py
中:
import dir1.sub1
在dir1/sub1.py
中:
def f1() -> None:
print("f1")
import dir1.sub2
dir1.sub2.f2()
在dir1/sub2.py
中:
import dir1.sub1
def f2() -> None:
dir1.sub1.f1()
print("f2")
当我 运行 main.py
时,我收到以下错误消息:
Traceback (most recent call last):
File "...\main.py", line 1, in <module>
import dir1.sub1
File "...\dir1\sub1.py", line 7, in <module>
dir1.sub2.f2()
File "...\dir1\sub2.py", line 5, in f2
dir1.sub1.f1()
AttributeError: module 'dir1' has no attribute 'sub1'. Did you mean: 'sub2'?
(其中文件路径开头的...
是我的工作目录。)
如果我把main.py
改成
import dir1.sub2
我收到一条略有不同的错误消息:
Traceback (most recent call last):
File "...\main.py", line 1, in <module>
import dir1.sub2
File "...\dir1\sub2.py", line 1, in <module>
import dir1.sub1
File "...\dir1\sub1.py", line 7, in <module>
dir1.sub2.f2()
AttributeError: module 'dir1' has no attribute 'sub2'
如果我将 sub1.py
和 sub2.py
移动到与 main.py
相同的目录并根据需要重新定向导入,我将得到
f1
f2
为什么会发生这种情况,我怎样才能让它不发生?
您需要使用绝对导入,因为 Python 3 只支持它。在 Python 2 中,您的方法将起作用。例如,如果您有 import dir1.sub2
,请将其更改为 from dir1 import sub2
。参见 here。
注意:我已经使用您的设置对其进行了测试并且它有效。