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

作者站长头像
站长
· 阅读数 6
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
回复
1个回答
avatar
test
2024-07-06

解决了

这个错误提示是因为在调用 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 时,您需要确保只加载来自可信来源的数据,以避免潜在的安全问题。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容