AttributeError:'模块'对象没有属性

我有两个python模块:

a.py

import b def hello(): print "hello" print "a.py" print hello() print b.hi() 

b.py

 import a def hi(): print "hi" 

当我运行a.py ,我得到:

 AttributeError: 'module' object has no attribute 'hi' 

错误是什么意思? 我如何解决它?

你有相互的顶级import,这几乎总是一个坏主意。

如果你真的必须在Python中进行相互导入,那么这样做的方法是在一个函数中导​​入它们:

 # In b.py: def cause_a_to_do_something(): import a a.do_something() 

现在a.py可以安全地import b而不会导致问题。

(乍一看, cause_a_to_do_something()可能会是非常低效的,因为每次调用它时都会import ,但事实上导入工作只能在第一次完成,第二次和后续导入模块时,快速操作。)

我也看到这个错误时,无意中命名一个模块与一个标准的Python模块相同的名称。 例如我有一个叫做commands的模块,它也是一个Python库模块。 事实certificate,由于在本地开发环境中正常工作,因此难以追查,但在Google App Engine上运行时,指定的错误失败。

问题是模块之间的循环依赖。 aimportbbimporta 。 但其中之一需要首先加载 – 在这种情况下python结束了初始化模块之前bb.hi()不存在,当你尝试访问它在a

我通过引用一个以错误方式导入的枚举来得到这个错误,例如:

 from package import MyEnumClass # ... # in some method: return MyEnumClass.Member 

正确导入:

 from package.MyEnumClass import MyEnumClass 

希望能帮助别人

我遇到这个错误,因为这个模块并没有被导入。 代码看起来像这样:

 import ab, ac # ... something(ab) something(ac) something(ad) # My addition, which failed. 

最后一行导致了一个AttributeError 。 原因是我没有注意到( abac )的子模块是明确导入的,并且假定import语句实际上导入a