这是2个py文件
aa.py
import bb
b = 3
bb.foo()
bb.py
import aa
def foo():
print(aa.b)
从aa.py运行时,出现此错误
Traceback (most recent call last):
File "D:\pyproj\Mytest\src\aa.py", line 7, in <module>
import bb
File "D:\pyproj\Mytest\src\bb.py", line 6, in <module>
import aa
File "D:\pyproj\Mytest\src\aa.py", line 9, in <module>
bb.foo()
AttributeError: 'module' object has no attribute 'foo'
我想解决问题,但我注意到一些有趣或有线的事情
我修改了测试
aa.py
print('before import bb in aa.py')
import bb
print('after import bb in aa.py')
bb.foo()
print('end of all')
bb.py
def foo():
print('before import aa in bb.foo()')
import aa
print('after import aa in bb.foo()')
从aa.py开始
before import bb in aa.py
after import bb in aa.py
before import aa in bb.foo()
before import bb in aa.py
after import bb in aa.py
before import aa in bb.foo()
after import aa in bb.foo()
end of all
after import aa in bb.foo()
end of all
任何人都可以解释这个吗?
答案 0 :(得分:4)
问题是循环依赖:aa
导入bb
,导入aa
。然后aa
调用bb.foo()
,但此功能尚未在bb
中完全定义,因为aa
的导入尚未完成。
最好避免这种复杂的依赖关系。您可以做的是将aa.b
作为参数传递给bb.foo()
:
aa.py
import bb
b = 3
bb.foo(b)
bb.py
def foo(b):
print(b)
答案 1 :(得分:4)
这是循环依赖问题,import aa
本地非全局bb.py
:
def foo():
import aa
print(aa.b)