Python 中 AttributeError module ‘numpy’ has no attribute ‘array’ 错误
当我们有一个名为 numpy.py 的本地文件并尝试从 numpy 模块导入时,会出现 Python“AttributeError module ‘numpy’ has no attribute ‘array’ ”。 要解决该错误,需要确保重命名所有名为 numpy.py 的本地文件。
下面是一个错误如何在名为 numpy.py 的文件中发生的示例。
import numpy as np
# ⛔️ AttributeError: module 'numpy' has no attribute 'array'
print(np.array([1, 2, 3]))
最可能的错误原因是有一个名为 numpy.py 的本地文件,它隐藏了官方的 numpy 模块。
确保将本地文件重命名为 numpy.py 以外的名称以解决错误。
import numpy as np
print(np.array([1, 2, 3])) # 👉️ [1 2 3]
另一件需要注意的事情是导入语句不正确。
Python 解释器首先在内置模块中查找导入的模块,然后在当前目录中查找,然后在 PYTHON PATH 中查找,然后在依赖于安装的默认目录中查找。
因此,当我们创建一个与第三方模块同名的本地文件时,我们实际上用我们的本地文件隐藏了官方模块。
我们可以访问导入模块的 __file__
属性以查看它是否被本地文件隐藏。
import numpy as np
# ⛔️ result if shadowed by local file
# /Users/jiyik/workspace/python/study/main.py
# ✅ result if pulling in correct module
# /Users/jiyik/venv/lib/python3.10/site-packages/numpy/__init__.py
print(np.__file__)
开始调试的一个好方法是 print(dir(your_module))
并查看导入的模块具有哪些属性。
这是当我在同一目录中有一个文件 numpy.py 时打印 numpy 模块的属性的样子。
import numpy as np
# ['__builtins__', '__cached__', '__doc__', '__file__',
# '__loader__', '__name__', '__package__', '__spec__']
print(dir(np))
如果将模块对象传递给 dir()
函数,它会返回模块属性名称的列表。
如果我们尝试访问不在此列表中的任何属性,我们将得到“
AttributeError: module has no attribute
”。
我们可以看到导入的 numpy 模块没有数组属性,这表明我们正在使用本地 numpy.py 文件隐藏官方 numpy 模块。
如果你尝试在一个名为 numpy.py 的文件中导入 numpy 模块,你会得到一些不同的错误消息,但意思是一样的。
import numpy as np
# ⛔️ AttributeError: partially initialized module 'numpy' has no attribute 'array' (most likely due to a circular import)
print(np.array([1, 2, 3])) # 👉️ [1 2 3]
重命名文件可以解决错误。
总结
当我们有一个名为 numpy.py 的本地文件并尝试从 numpy
模块导入时,会出现 Python“AttributeError module ‘numpy’ has no attribute ‘array’”。 要解决该错误,请确保重命名所有名为 numpy.py 的本地文件。