numpy.load 获取 None 值会报错如何解决?
import numpy
limit = None
numpy.savez_compressed(
'123.npz',
limit=limit
)
d = numpy.load('123.npz')
limit = d.get('limit', None)
运行后报错
Traceback (most recent call last):
File "/Users/ponponon/Desktop/code/me/ideaboom/main.py", line 12, in <module>
limit = d.get('limit', None)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/_collections_abc.py", line 824, in get
return self[key]
File "/Users/ponponon/.local/share/virtualenvs/ideaboom-B0dr_aXc/lib/python3.10/site-packages/numpy/lib/npyio.py", line 253, in __getitem__
return format.read_array(bytes,
File "/Users/ponponon/.local/share/virtualenvs/ideaboom-B0dr_aXc/lib/python3.10/site-packages/numpy/lib/format.py", line 787, in read_array
raise ValueError("Object arrays cannot be loaded when "
ValueError: Object arrays cannot be loaded when allow_pickle=False
解决了
这个错误提示是因为在调用 numpy.load()
函数时没有设置 allow_pickle=True
参数,而默认情况下 allow_pickle=False
,这意味着 numpy.load()
函数不能加载包含 Python 对象(例如 None
)的数组。为了解决这个问题,您需要将 allow_pickle=True
作为参数传递给 numpy.load()
函数,如下所示:
import numpy
limit = None
numpy.savez_compressed(
'123.npz',
limit=limit
)
d = numpy.load('123.npz', allow_pickle=True) # 添加 allow_pickle=True 参数
limit = d.get('limit', None)
在这个示例中,我们在调用 numpy.load()
函数时添加了 allow_pickle=True
参数,以允许加载包含 Python 对象的数组。这样,您就可以成功加载 limit
变量的值了。
Q:numpy.load 的 allow_pickle 参数是干嘛的?
A:allow_pickle
参数是 numpy.load()
函数的一个可选参数,用于指示是否允许加载包含 Python 对象的数组。默认情况下,allow_pickle
参数的值为 False
,这意味着 numpy.load()
函数不能加载包含 Python 对象的数组。如果您的数组中包含 Python 对象(如 Python 内置类型 list
或 dict
,或自定义对象),则需要将 allow_pickle
参数设置为 True
。
当 allow_pickle=True
时,numpy.load()
函数会允许加载包含 Python 对象的数组。这将导致 numpy.load()
函数更加灵活,但也会带来一些潜在的风险,因为加载任意 Python 对象可能会导致恶意代码的执行。因此,建议只在需要加载包含 Python 对象的数组时使用 allow_pickle=True
。
在使用 allow_pickle=True
时,您需要确保只加载来自可信来源的数据,以避免潜在的安全问题。
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容