python - 导入目录时出现奇怪的属性错误
问题描述
我有一个目录树如下:
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
. 见这里。
注意:我已经使用您的设置对其进行了测试,并且可以正常工作。
推荐阅读
- firebase - 将来自 Firebase 和 Google 分析的数据合并到 1 个视图中
- fiware - 可与 Fiware 集成的可视化工具
- sql - SQLSTATE [42601]:语法错误:7 错误:子查询必须只返回一列使用函数
- kotlin - 如何在 Kotlin 中禁用字符串插值?
- python-3.x - 当两个 OrderedDict 中的键相同时,如何添加两个 OrderedDict?
- r - 将数据框保存在 Shiny 中以便以后访问并下载?
- git - 我可以为 git add --patch 添加自己的选项吗?
- python - 带有 django 的动态 html 表
- iis - 具有报告查看器问题的 SSRS 未刷新
- python - 如何在 python 中使用三个 1D 数组绘制 3D 曲面图,因为我收到错误 Z 必须是二维的。如何将其转换为二维数组?