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.dumpprotocol参数。 您的结果代码将如下所示。

 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参数。