AttributeError的:“模块”对象有没有属性(AttributeError: 'm

2019-06-18 05:50发布

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

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

Answer 1:

你们互相有顶级进口,这几乎总是一个坏主意。

如果你真的必须在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每次调用它,但实际上进口工作只能够完成第一次。你导入一个模块的第二次及以后,它的一个快速的操作。)



Answer 2:

我也看到了这个错误时,无意中命名具有相同的名称作为标准的模块中的一个模块。 例如,我有一个名为模块commands ,这也是一个Python库模块。 这被证明是难以追查,因为它工作正常我本地开发环境,但在谷歌App Engine上运行时使用指定的错误而失败。



Answer 3:

问题是模块之间的循环依赖关系。 a进口bb进口a 。 但需要其中的一个首先装载-在这种情况下,蟒蛇结束初始化模块abb.hi()当您尝试访问它还不存在a



Answer 4:

我通过引用这是在一个错误的方式,例如进口枚举得到这个错误:

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

正确导入:

from package.MyEnumClass import MyEnumClass

希望可以帮助别人



Answer 5:

我经历了这个错误,因为该模块没有实际进口。 该代码是这样的:

import a.b, a.c

# ...

something(a.b)
something(a.c)
something(a.d)  # My addition, which failed.

最后一行导致的AttributeError 。 原因是我当时没有注意到的子模块aabac明确了进口,并假定import语句实际进口a



Answer 6:

我就遇到了这个问题,当我检查了从混帐存储库的旧版本。 Git的取代了我.py文件,但留下的未跟踪.pyc的文件。 由于.py文件和.pyc的文件是不同步的,在import的命令.py文件找不到在相应的模块.pyc的文件。

解决的办法是简单地删除.pyc的文件,并让他们自动再生。



Answer 7:

以上所有的答案都是伟大的,但我想在这里插入内容。 如果没有发现上述的任何问题,请尝试清理您的工作环境。 它为我工作。



Answer 8:

不知道怎么样,但下面的变化排序我的问题:

我有文件,并导入名称相同的比如我有文件名作为emoji.py和我试图导入的表情符号的名称。 但是,更改文件名来解决这个问题。

所以希望它可以帮助



Answer 9:

圆形进口造成问题,但是Python有办法减轻它内置。

问题是,当你运行python a.py ,它运行a.py ,但没有将它标记导入为模块。 所以反过来a.py - >进口模块B - >进口模块- >导入模块B。 上次导入由于B无操作,目前正在进口和打击了Python警卫。 和b是一个空的模块了。 因此执行时b.hi()它不能发现任何东西。

注意, b.hi()访问内容被执行时期间a.py - >模块B - >模块,而不是在a.py直接。

在您的具体的例子,你可以运行python -c 'import a'在顶层,所以第一次执行a.py被注册为导入模块。



文章来源: AttributeError: 'module' object has no attribute