ValueError:不支持的pickle协议:3,python2 pickle无法加载python 3 pickle转储的文件?

时间:2014-09-15 08:26:30

标签: python python-3.x python-2.7 pickle valueerror

我使用pickle在python 3上转储文件,我使用pickle在python 2上加载文件,出现ValueError。

那么,python 2 pickle无法加载python 3 pickle转储的文件?

如果我想要它?怎么办?

2 个答案:

答案 0 :(得分:126)

您应该在Python 3中使用较低的协议编号编写pickle数据.Python 3引入了一个编号为3的新协议(并将其用作默认值),因此切换回{{1}的值这可以被Python 2读取。

检查pickle.dump中的2参数。生成的代码将如下所示。

protocol

pickle.load中没有pickle.dump(your_object, your_file, protocol=2) 参数,因为protocol可以从文件中确定协议。

答案 1 :(得分:44)

Pickle使用不同的protocols将您的数据转换为二进制流。

您必须在python 3中指定低于3的协议才能在python 2中加载数据。您可以在调用pickle.dump时指定protocol参数。< / p>