我有两个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'

这个误差是什么意思?我该怎么解决呢?


当前回答

我还曾在无意中将一个模块命名为标准Python模块时遇到过这种错误。例如,我有一个名为commands的模块,它也是一个Python库模块。这被证明很难追踪,因为它在我的本地开发环境中正确工作,但在谷歌应用程序引擎上运行时失败了。

其他回答

以上所有的答案都很棒,但我想在这里插一句。如果你没有发现上面提到的任何问题,试着清理一下你的工作环境。这对我很管用。

不知道如何,但下面的改变排序我的问题:

我的文件名和导入名称相同,例如我的文件名为emoji.py,我试图导入表情符号。但是改变文件名解决了这个问题。

希望能有所帮助

对我来说,这个错误的原因是有一个文件夹与我试图导入的python模块同名。

|-- core  <-- empty directory on the same level as the module that throws the error
|-- core.py

python将该文件夹视为python包,并试图从空包“core”导入,而不是从core.py导入。

似乎出于某种原因,git在切换分支时留下了空文件夹

所以我移除了那个文件夹,一切都很顺利

你存了'b.py'吗? 你必须先保存'b.py'。

导入的顺序是我遇到问题的原因:

a.py:

############
# this is a problem
# move this to below
#############
from b import NewThing

class ProblemThing(object):
    pass

class A(object):
   ###############
   # add it here
   # from b import NewThing
   ###############
   nt = NewThing()
   pass

b.py:

from a import ProblemThing

class NewThing(ProblemThing):
    pass

这只是另一个例子,类似于richieindie的答案,但是有类。