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