【问题标题】:ValueError: unsupported pickle protocol: 3, python2 pickle can not load the file dumped by python 3 pickle?ValueError: unsupported pickle protocol: 3、python2 pickle无法加载python 3 pickle转储的文件?
【发布时间】:2014-11-08 17:21:08
【问题描述】:

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

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

如果我想要?怎么办?

【问题讨论】:

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


【解决方案1】:

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

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

pickle.dump(your_object, your_file, protocol=2)

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 仅供参考,显然有一个协​​议5在Python 3.8中也被引入,它与早期版本不兼容。
    • 回复:协议 5 python.org/dev/peps/pep-0574
    猜你喜欢
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多