尝试取消列表时的KeyError

时间:2012-05-26 01:36:45

标签: python pickle

我有一个包含浮动列表的腌制列表的文件。我可以在腌制它的同一台机器上没有问题地加载列表,但是当我在另一台机器上尝试它时,我收到以下错误:

Traceback (most recent call last):
File "<console>", line 2, in <module>
File "/usr/lib/python2.7/pickle.py", line 1378, in load
  return Unpickler(file).load()
File "/usr/lib/python2.7/pickle.py", line 858, in load
  dispatch[key](self)
KeyError: '\x00'

两个python版本是2.7.0(在原始机器上)和2.7.2(在试图取消文件的那个上)。我认为不应该因此而存在任何不相容性。

3 个答案:

答案 0 :(得分:1)

  

我认为不应因此而存在任何不相容性。

除非在最近的版本中修复了2.7.0中的某些错误。检查他们的更改说明,我个人认为Issue 7117是最可能的罪魁祸首:

  

问题#7117:在几乎所有平台上:float-to-string和string-to-float     Python中的转换现在已正确舍入。放置这些转化     发生包括:str为浮点数和复数;漂浮和复杂     构造函数;旧式和新式数字格式;序列化和     使用marshal,pickle和json对浮点数和复数进行反序列化;     在Python代码中解析float和imaginary文字;十进制到浮     转换。

答案 1 :(得分:1)

我遇到了同样的问题并尝试了许多事情但都徒劳无功。最后,我使用了cPickle,问题解决了。只需用'cPickle'代替'pickle',一切都运转正常。它有完全相同的方法和args。

import cPickle

cPickle.dump()

cPickle.load()

答案 2 :(得分:0)

使用python 2.7.12无法用列表取消json文件,即 [{&#34; k&#34;:0},{&#34; k&#34;:1}]

cPickle没有帮助,json做了:

import json
json.load(open(file))