【问题标题】:pickle ValueError: itemsize cannot be zeropickle ValueError:项目大小不能为零
【发布时间】:2014-02-18 19:11:53
【问题描述】:

加载腌制字典时 -->

使用 pickle 我收到此错误:

ValueError: itemsize cannot be zero

使用 cPickle 我收到此错误:

ValueError: ('itemsize cannot be zero', <built-in function scalar>,(dtype('<U'), ''))

字典看起来像这样:

{(u'foo', u'bar'): {'which': [1,2,3], 1:[[u'a', u'b', u'c'], [u'aa', u'bb', u'']]}} 

键 1 的值是使用 .tolist() 转换为列表的 numpy 数组。

字符串是 unicode(我不小心将一些 ascii 字符串编码为 un​​icode。我不知道这是否与这些有关)

键和值都可以包含 u'' 作为值,但绝不会仅包含 u'' 项

我正在使用 python 2.7.5 和 numpy 1.7.1

我不确定为什么 cPickle 错误引用了 dtype。这是 cPickle 模块中的东西还是指的是我曾经转换为列表的 numpy 数组?

【问题讨论】:

  • 这个字典在 2.7.2 中对我来说没问题。
  • 你是对的。我的示例 dict 不会重新创建错误。它只是为了显示字典的基本宏观结构。我将编辑我的问题以显示一些引发我关注的错误的示例代码。
  • 错误。我不知道如何重新创建错误。生成字典的代码超过 500 行,运行大约需要 1.5 小时。我的假设是它在某种程度上与 numpy 和/或我的编码尝试有关。
  • 你使用rbwb作为文件吗?
  • 是的。我用'wb'来写和'rb'来读。

标签: python arrays numpy unicode


【解决方案1】:

这是最近在此pull request 中修复的 NumPy 错误。要重现它,请尝试:

import cPickle
import numpy as np
cPickle.loads(cPickle.dumps(np.string_('')))

【讨论】:

    【解决方案2】:

    我用虚拟字符值替换了所有u'' 字符串,我的问题就解决了。

    Unable to load a previously dumped pickle file in Python 提供了有关此问题的更多信息。在某种程度上,numpy 和空字符串与 pickle 不兼容似乎是一个问题,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 2021-04-14
      • 2013-12-25
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多