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

Ale*_*eee 86 python pickle python-2.7 python-3.x valueerror

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

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

如果我想要它?怎么做?

Mat*_*ias 138

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

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

pickle.dump(your_object, your_file, protocol=2)
Run Code Online (Sandbox Code Playgroud)

没有protocol参数pickle.load因为pickle可以从文件中确定协议.


enr*_*cis 47

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

您必须在python 3中指定一个低于3能够在python 2中加载数据的协议.您可以protocol在调用时指定参数pickle.dump.

  • 仅供将来参考,显然 Python 3.8 中也引入了一个协议“5”,该协议与早期版本不兼容。 (13认同)