我有2个非常简单的python文件。我这样做是为了测试blah2.py在2秒钟的睡眠后是否看到最初声明为None的两个变量的更新版本。文件如下:
blah1.py
from time import sleep
import blah2
movingVariable1 = None
movingVariable2 = None
sleep(2)
movingVariable1 = "sup"
movingVariable2 = "blahhh"
blah2.myFunc()
blah2.py
from blah1 import movingVariable1
from blah1 import movingVariable2
def myFunc():
global movingVariable1
global movingVariable2
print(movingVariable1)
print(movingVariable2)
虽然我收到以下错误,但我不确定为什么。
Traceback (most recent call last):
File "blah1.py", line 2, in <module>
import blah2
File "/home/pi/blah2.py", line 1, in <module>
from blah1 import movingVariable1
File "/home/pi/blah1.py", line 10, in <module>
blah2.myFunc()
AttributeError: module 'blah2' has no attribute 'myFunc'
myFunc()显然在blah2.py中被定义为一个函数。谁能在这个基本示例中解释我做错了什么?
您正在blah2.py中创建循环依赖项>
在您的示例中blah1导入blah2,而blah1依次导入blah1,而blah1将再次导入blah2,依此类推...等等>
为myFunc设置movingVariable
和movingVariable2
参数,并删除blah2.py中的blah1.py导入。
回复跟进
# blah1.py from blah1 import movingVariable1 from blah1 import movingVariable2 def myFunc(): global movingVariable1 global movingVariable2 print(movingVariable1) print(movingVariable2)
# blah2.py from time import sleep movingVariable1 = None movingVariable2 = None if __name__ =='__main__': import blah2 sleep(2) movingVariable1 = "sup" movingVariable2 = "blahhh" blah2.myFunc()
如果您这样更改它,它将起作用。因为当blah2导入blah1.py时,它没有看到
import blah2
,因此__name__
将不等于__main__
。