AttributeError:'module'对象没有属性'foo'

时间:2012-08-31 07:26:33

标签: python module

这是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

任何人都可以解释这个吗?

2 个答案:

答案 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)