【问题标题】:How to convert pickle.loads from Python 2 to Python 3?如何将 pickle.loads 从 Python 2 转换为 Python 3?
【发布时间】:2019-04-22 09:28:34
【问题描述】:

我正在尝试将 Python 2 代码转换为 Python 3。我在 Python 2.7 中使用了 pickle.loads 函数,根据其文档,该函数执行以下操作 (https://docs.python.org/2.7/library/pickle.html):

pickle.loads(string)
Read a pickled object hierarchy from a string. Characters in the 
string past the pickled object’s representation are ignored.

但是它在 Python 3 中的行为发生了变化 (https://docs.python.org/3/library/pickle.html):

pickle.loads(bytes_object, *, fix_imports=True, encoding="ASCII", errors="strict")
Read a pickled object hierarchy from a bytes object and return the 
reconstituted object hierarchy specified therein.

在数据库中,我有一个字符串 x,它是在 Python 2 中执行的 pickle.dumps(obj) 的输出。我想在 Python 3 中检索 obj。当我执行 pickle.loads(x) 时,我收到以下错误:

a bytes-like object is required, not 'str'

pickle.loads(x) 改为pickle.loads(bytes(x, 'utf-8')) 会出现以下错误:

invalid load key, '\x5c'.

如何在 Python 3 中从x 获取obj

【问题讨论】:

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


【解决方案1】:

pickle.loads(x) 更改为pickle.loads(bytes(x, 'latin-1'))

pickle.dumps(o) 更改为str(pickle.dumps(o, protocol=0), 'latin-1')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 2023-03-20
    • 2019-06-12
    • 2017-04-30
    • 2018-12-12
    相关资源
    最近更新 更多