在 Python 中加载 pickled 文件时可能会出现什么错误?

问题描述 投票:0回答:1

腌制后的文件是voc_final.pkl,在论文GAMENet中使用的源代码中。

我尝试加载它:

import dill
voc = dill.load(open("voc_final.pkl", 'rb'))

但出现错误:

TypeError: code expected at least 16 arguments, got 15

这很奇怪,因为即使 pickled 文件包含另一个库中的未知类,而该类在我的计算机中不可用。腌制文件的加载应该没问题。我测试了这个场景:

写泡菜:

import dill

class XYZ():
    def __init__(self, i):
        self.x = i
        self.y = {}
    
    def do_something(k):
        return k + 10

p = XYZ(10)

with open('test.pkl','wb') as output:
    dill.dump(obj={"aaa": p}, file=output)

在另一个 Python 会话中加载 pickle :

import dill with open('test.pkl','rb') as input: kkk = dill.load(input)
这工作得很好

我想知道加载 pickled 文件时可能会出现什么错误?当然,不是像“文件未找到”、“文件正在使用”等小错误。

也许是因为Python版本不同,正如

这里

所说:“也不能保证不同版本的Python之间的兼容性,因为并不是每个Python数据结构都可以被模块序列化。”? 再现性

Windows 10 x64
  • Python 3.11.7
python serialization deserialization pickle dill
1个回答
0
投票
3.11.7

,原作者:

3.6
)。
我检查了他们的 

Jupyter Notebook

,发现他们正在使用 Anaconda 和 Python 3.6。我创建了相同的环境(Python 3.6)并且可以加载腌制文件: import dill voc = dill.load(open("voc_final.pkl", 'rb'))

输出:

{'diag_voc': <__main__.Voc at 0x7fb058f14d68>, 'med_voc': <__main__.Voc at 0x7fb058ecce80>, 'pro_voc': <__main__.Voc at 0x7fb058edd0b8>}

如果任何已发布的 Python 源代码包含
requirements.txt

,那就太好了。

    

© www.soinside.com 2019 - 2024. All rights reserved.