我有两个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'
这个错误是什么意思?我该如何修复它?
发布于 2009-08-08 23:27:29
您有相互的顶级导入,这几乎总是一个坏主意。
如果您确实需要在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
,但实际上,导入工作只在第一次完成。第二次或以后导入模块时,这是一个快速操作。)
发布于 2010-06-26 22:18:21
当我无意中命名了一个与标准Python模块同名的模块时,我也看到了这个错误。例如,我有一个名为commands
的模块,它也是一个Python库模块。事实证明,这很难追踪,因为它在我的本地开发环境中工作正常,但在Google App Engine上运行时出现指定的错误。
发布于 2009-08-08 23:19:41
问题在于模块之间的循环依赖。a
导入b
,b
导入a
。但是需要先加载其中的一个-在本例中,python在b
之前初始化模块a
,而当您尝试在a
中访问它时,b.hi()
还不存在。
https://stackoverflow.com/questions/1250103
复制相似问题