gpt4 book ai didi

python - 为什么文件名struct.py报错?

转载 作者:行者123 更新时间:2023-12-04 00:54:51 24 4
gpt4 key购买 nike

我正在试验 python 中的图像处理,这两天我遇到了一个问题。

我意识到在尝试下面的简单脚本时,将文件命名为 struct.py 会出现错误“numpy.core.multiarray 导入失败”:

import numpy as np

k = np.ones((9,9))

print(k)

当我用另一个名字创建一个文件时,同样的代码起作用了。

现在我正在寻找发生这种情况的原因。

我创建了一个测试文件“struct.py”来尝试不同的结构元素进行形态学操作。在我所有其他测试文件中,numpy 都正常工作,但由于某种原因,在那个“struct.py”脚本中,我收到一条错误消息,指出“numpy.core.multiarray 导入失败”。我非常投入解决这个问题,以至于在解决过程中我没有想过测试 numpy 是否在我的其他脚本中工作(他们以前工作过的地方)

我重新安装了 python 几次,切换了 IDE,尝试在本地编码而不是使用版本 Controller ,但所有这些事情对我来说似乎都是不必要的,因为我不明白这可能是 numpy 不这样做的原因工作。

今天我看到有一个名为 struct 的 python 模块,我在脚本中使用该名称一定是问题的原因,但我仍然不明白为什么 numpy 会因此停止工作。 numpy 是否依赖于 struct 模块?怎么会这样?

这也是我第一次在 stackoverflow 上实际发布问题,如果我应该更改帖子的内容或删除不必要的信息或添加更多信息,请告诉我。

最佳答案

你不能命名你的模块 struct.py 因为 struct 模块作为内置存在(这用于将数据序列化/反序列化到/从内存/磁盘,具有数字类型的字节顺序和大小管理)

>>> import struct
>>> struct.__file__
'C:\\Users\\xxxx\\AppData\\Local\\Programs\\Python\\Python37\\lib\\struct.py'

如果您创建一个以相同方式命名的文件,如果另一个模块试图导入内置的 struct 模块,它可能会导入您的模块,并且可能会出现难以理解的错误。

如果我在当前目录中创建一个 struct.py 文件,其中仅包含:

print("hellooooo bug")

这里当我导入 numpy 时会发生什么:

>>> import numpy
hellooooo bug
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\jotd6\AppData\Local\Programs\Python\Python37\lib\site-packages\numpy\__init__.py", line 140, in <module>
from . import _distributor_init
File "C:\Users\jotd6\AppData\Local\Programs\Python\Python37\lib\site-packages\numpy\_distributor_init.py", line 9, in <module>
from ctypes import WinDLL
File "C:\Users\jotd6\AppData\Local\Programs\Python\Python37\lib\ctypes\__init__.py", line 14, in <module>
from struct import calcsize as _calcsize

如您所见,numpy 需要 struct。只是不要使用该名称(或任何通用名称,而不检查它是否首先作为内置名称存在)。 Python csv import fails 的间接变体

关于python - 为什么文件名struct.py报错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63330519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com