【发布时间】:2013-03-19 11:17:39
【问题描述】:
我正在尝试使用 cPickle 加载文件,如下所示,
import cPickle
cPickle.load(open('test', 'rb'))
但是,我得到了这个错误,
---------------------------------------------------------------------------
UnpicklingError Traceback (most recent call last)
<ipython-input-527-1b7653ff1917> in <module>()
----> 1 cPickle.load(open('test', 'rb'))
UnpicklingError: unpickling stack underflow
有时它会给出这个错误
UnpicklingError: could not find MARK
我得到这个有什么原因吗?
PS:cPickle 无法与我一起使用任何文件,即使是新创建的仅包含两个单词的文件。我使用的是 ubuntu 12.04 和 Python 64bit
【问题讨论】:
-
看起来您可能缺少一些前导或尾随字节。你是怎么做文件的?你关门前冲水了吗?小到可以在这里发帖吗?
-
@dan.lecocq,我已经更新了问题,基本上,它不适用于任何文件,文件内容类似于“测试测试”,我通过右键单击文件创建来创建文件
-
您能否发布以下输出:
cPickle.loads(cPickle.dumps("test"))? -
是的,
In [544]: cPickle.loads(cPickle.dumps("test")) Out[544]: 'test' -
好的。好吧,至少您的
cPickle模块相对健全:-)。当你说你的文件内容类似于“测试测试”时,你是手工制作这个文件吗?它们必须由cPickle制作,才能由cPickle阅读。除此之外,我会尝试将其写入文件,并验证它是否与cPickle.dumps('test')匹配。如果您加入 SO 聊天,我们可以进行更多的交互式调试。