ValueError:不受支持的pickle协议:3,python2 pickle无法加载python 3 pickle转储的文件?
我使用pickle在python 3上转储一个文件,然后使用pickle在python 2上加载文件,出现ValueError。
那么,python 2 pickle不能加载python 3 pickle转储的文件?
如果我想要它? 怎么做?
您应该在Python 3中使用较低的协议编号来编写pickled数据。Python 3引入了一个新的协议,编号为3
(并将其用作默认值),因此切换回可以由Python 2读取的值2。
检查pickle.dump
的protocol
参数。 您的结果代码将如下所示。
pickle.dump(your_object, your_file, protocol=2)
pickle.load
没有protocol
参数,因为pickle
可以从文件中确定协议。
Pickle使用不同的protocols
将数据转换为二进制stream。
-
在Python 2中有3种不同的协议 (
0
),默认为0
。 -
在Python 3中有5种不同的协议 (
0
),默认值是3
。
您必须在python 3中指定一个低于3的协议,以便能够在python 2中加载数据。您可以在调用pickle.dump
时指定protocol
参数。