【发布时间】:2020-05-18 18:45:52
【问题描述】:
我想了解我的问题的根源。我遇到过几次这种情况,每次都想出来很费时间。
这一次我觉得我错过了一些我认为我理解的东西。 相关问题贴在这里:Infinite loop with Python imports; looking for Pythonic way
我决定我的模块存在无限循环,但我仍然遇到同样的错误。所以这就是我所拥有的。
我在这里也包含了__init__.py 文件,因为我怀疑这个文件可能会导致我目前不知道的行为。
在sources/preparation/features/__Init__.py:
from .build_features import *
from .get_qualified_edges import *
from .select_strategy import *
from .test import *
在sources/preprocessing/__init__.py,我有:
from .apply_preprocessing import *
from .convertion import *
在sources/preprocessing/apply_preprocessing 我有:
from Sources.Preparation.Features.get_qualified_edges import get_all_GeneDisease_unweighted_disease2disease_qualified_edges
from Sources.Preparation.Features.get_qualified_edges import get_GPSim_disease2disease_qualified_edgesjk
在目录source/preparation/features/get_qualified_edges.py:
from Sources.Preprocessing.convertion import Converter # added this lien causes error to be raised
from itertools import combinations
在Sources/preprocessing/conversion.py 我没有导入任何东西。
以下是由于出现错误而运行的文件序列:
sources\__init__.py
sources\preparation\__init__.py
sources\prepartion\features\__init__.py
sources\preparation\features\build_features.py
sources\preparation\features\get_qualified_edgdes.py
sources\preprocessing\__init__.py
sources\preprocessing\apply_preprocessing.py
\\error raise
当我从Sources.Preprocessing.convertion 导入一个类时引发错误,如下所示。在source/preparation/features/get_qualified_edges.py:
from Sources.Preprocessing.convertion import Converter # added this lien causes error to be raised
如果你们需要有关此问题的更多信息,请告诉我。
我想知道的是:为什么会出现这个问题?
当我将Converter 从Sources.Preprocessing.convertion 移动到Sources.Preparation.Data.conversion 时,我解决了这个问题。
观察
我观察到的是,当Sources.Preprocessing.modules_A(在Sources.Preparation.modules_C 中导入)和Sources.Preparation.modules_B(在Sources.Preprocessing.modules_D 中导入)之间没有“交叉”导入时,错误消失了。
就是这样。模块之间没有直接的“交叉”导入,而是在父模块之间存在“交叉”导入,如果这有意义的话。
【问题讨论】:
-
您的导入结构很复杂,因此很难确定,但我怀疑您有模块 A 导入 B,而 B(直接或间接)导入 A。A 定义了 B 需要的函数 在它的
import B声明之后。 Python 中的导入是可执行语句,因此解释器在被告知导入 B 时会暂停处理 A。这可能意味着在导入 B 时尚未处理 A 中所需的def。
标签: python class import module