我在另一个中使用python模块时遇到问题。用例如下:
请考虑以下情形。相应地评论了错误。
在文件A.py中:
import B
...
...
在文件B.py中:
import C
import A
c_func = C.func1() # works perfectly
a_func = A.func2() # Error: 'module' object has no attribute 'func2'
...
...
在文件C.py中:
...
...
有什么想法吗?提前谢谢。
答案 0 :(得分:6)
这是循环导入。一般来说,它们不起作用。
请参阅常见问题解答中的How can I have modules that mutually import each other?以获取解释,以及解决此问题的一些不同方法。在Fredrik Lundh的effbot网站上还有一个Circular Imports部分。但简单地说:
A
开始执行。A
到达import B
。B
开始执行。B
到达import A
。由于A
已经存在,因此无效。无论A
中的代码是什么还没有运行 - 就像A.func2
的定义一样 - 仍然没有运行。B
尝试使用尚未定义的A.func2
,因此您收到错误。(更简单,但不太准确:B
取决于A
,这取决于B
,这意味着B
在B
之前无法运行这可以帮助您直观地理解问题,这可以帮助您理解上面更完整/准确的解释。)
您可能想要做的是将A
B
所需的代码移到一个单独的模块中,A
和B
都可以导入,我需要导入A
或B
。这不是唯一可能的解决方案(请参阅其他两个想法的FAQ条目),但是当它可以干净利落地完成时,它很难被击败。 (如果没有实际代码,很难给出更具体的答案。)