【问题标题】:"pickle exhausted before end of frame" when using Dill with code that works fine with Pickle将 Dill 与适用于 Pickle 的代码一起使用时,“pickle 在帧结束前用尽”
【发布时间】:2015-12-16 18:51:00
【问题描述】:

我正在开发一个使用 Pickle 来实现存档游戏的游戏项目(我知道这样做的缺点 - 我们不在这里讨论)。这非常有效:不幸的是,标准 Pickle 无法处理我希望在未来版本中做的一些事情,所以我改用 Dill。不幸的是,它不起作用:它会在加载保存时提供_pickle.UnpicklingError: pickle exhausted before end of frame

重申:这段代码和我正在使用的测试用例与 Pickle 完美配合。只有 Dill 有问题。

我正在像这样导入 Dill:

try:
    import dill as pickle
except ImportError:
    print("Failed to load Dill serialization library: some features may not work correctly.")
    import pickle

完整的回溯是这样的:

   Traceback (most recent call last):
  File "C:/Users/Schilcote/workspace/pyweek19/main.py", line 605, in game_init
    gamestate=pickle.load(open(os.path.join(_savedir,"save.sav"),"rb"))
  File "C:\Python34\lib\site-packages\dill\dill.py", line 199, in load
    obj = pik.load()
  File "C:\Python34\Lib\pickle.py", line 1036, in load
    dispatch[key[0]](self)
  File "C:\Python34\Lib\pickle.py", line 1321, in load_global
    module = self.readline()[:-1].decode("utf-8")
  File "C:\Python34\Lib\pickle.py", line 247, in readline
    "pickle exhausted before end of frame")
_pickle.UnpicklingError: pickle exhausted before end of frame

我什至不知道如何开始诊断。怎么回事?

编辑:

为了澄清,错误出现在de序列化。

【问题讨论】:

  • 您在测试中使用的save.sav 文件是如何生成的?即它是使用pickledill 生成的吗?
  • @Sebastian With dill.
  • @Sebastian 澄清一下,我总是针对pickle 生成的文件测试pickle,并针对dill 生成的文件测试dill。我没有尝试将两者混合,但我怀疑会发生什么好事。
  • ^1 因为那个标题
  • 我很确定这是 Dill 中的一个直接错误。 @Mike McKerns?

标签: python python-3.x serialization pickle dill


【解决方案1】:

也许您正在(或曾经)使用 CPython 3.4?如果是这样,there was a bugshould be fixed already

我也遇到了这个问题,不是在我的电脑上,它有 Python 3.4.4,而是在 Github 的 Travis 上,它使用的是 3.4.2。

【讨论】:

  • 我确实是! 3.5 仍然无法在我的机器上运行,但我会尝试再次安装它,看看是否能解决问题。
猜你喜欢
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多