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()
函数,如下所示:在这个示例中,我们在调用
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
时,您需要确保只加载来自可信来源的数据,以避免潜在的安全问题。