当我这样做时:
import XYZ
XYZ.boo(xyz)
XYZ是一个库,boo
是该库的函数,xyz是我传递给函数的参数。
我收到以
AttributeError: module 'XYZ' has no attribute 'boo'
发生了什么事?
注意:对于同一主题但隐含不同库的几个问题,这应该是canonical answer
答案 0 :(得分:1)
确保当前目录中没有Python脚本,模块或软件包与您要导入的内置或第三方模块具有相同的名称。真的,最好完全避免名称冲突。
假设你想尝试使用Python的turtle模块。您决定将脚本命名为 turtle.py ,并写下:
# turtle.py
import turtle
def move_turtle(num):
turtle.forward(num)
move_turtle(1)
运行时,会收到错误:
Traceback (most recent call last):
File "./turtle.py", line 2, in <module>
import turtle
File "/path/to/your/directory/turtle.py", line 7, in <module>
move_turtle(1)
File "/path/to/your/directory/turtle.py", line 5, in move_turtle
turtle.forward(num)
AttributeError: module 'turtle' has no attribute 'forward'
问题是您的 turtle.py 干扰了内置 turtle 模块的导入。语句import turtle
实际上导入了本地 turtle.py 脚本而不是内置脚本。
有一种简单的方法可以验证这是问题所在。在回溯中,提到的最后一个文件是/path/to/your/directory/turtle.py"
,表示您没有导入内置的 turtle 模块。内置的乌龟应位于Linux上类似于/usr/lib/pythonX.Y/turtle.py
的位置,或Windows上的C:\PythonXY\Lib\turtle.py
。
要解决此问题,请将脚本重命名为其他内容,例如myturtle.py
。
答案 1 :(得分:0)
确保使用具有此类属性的库版本。
如果导入正确,您可以使用dir(XYZ)
探索属性
否则,此错误是由于意外导入造成的。
模块python正在导入
XYZ
是您在同一文件夹或%PATH
中创建的XYZ.py
而不是所需的库。或者它是您调用库的文件。
您应重命名该模块,以避免与现有软件包发生冲突并删除*.pyc
个文件。您可以重命名为XYZ_test.py
或任何其他名称,以避免与已安装的库冲突。
然后你应该能够做到:
import XYZ
foo = XYZ.boo