numpy.load 获取 None 值会报错如何解决?

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 内置类型 listdict,或自定义对象),则需要将 allow_pickle 参数设置为 True

allow_pickle=True 时,numpy.load() 函数会允许加载包含 Python 对象的数组。这将导致 numpy.load() 函数更加灵活,但也会带来一些潜在的风险,因为加载任意 Python 对象可能会导致恶意代码的执行。因此,建议只在需要加载包含 Python 对象的数组时使用 allow_pickle=True

在使用 allow_pickle=True 时,您需要确保只加载来自可信来源的数据,以避免潜在的安全问题。

以上是 numpy.load 获取 None 值会报错如何解决? 的全部内容, 来源链接: utcz.com/p/938855.html

回到顶部