"pickle exhausted before end of frame" 将 Dill 与适用于 Pickle 的代码一起使用时
"pickle exhausted before end of frame" when using Dill with code that works fine with Pickle
我正在开发一个使用 Pickle 来实现游戏存档的游戏项目(我知道这样做的缺点 - 我们不在这里讨论)。这非常有效:不幸的是,标准 Pickle 无法处理我希望在未来版本中做的一些事情,所以我正在过渡到 Dill。不幸的是,它不起作用:它会在加载存档时给出 _pickle.UnpicklingError: pickle exhausted before end of frame
。
重申一下:这段代码和我正在使用的测试用例与 Pickle 完美配合。它只有 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序列化时。
也许您正在(或曾经)使用 CPython 3.4?如果是,there was a bug that should be fixed already.
我也有这个问题,不是在我的电脑上,它有 Python 3.4.4,而是在 Github 的 Travis 上,它使用的是 3.4.2。
我正在开发一个使用 Pickle 来实现游戏存档的游戏项目(我知道这样做的缺点 - 我们不在这里讨论)。这非常有效:不幸的是,标准 Pickle 无法处理我希望在未来版本中做的一些事情,所以我正在过渡到 Dill。不幸的是,它不起作用:它会在加载存档时给出 _pickle.UnpicklingError: pickle exhausted before end of frame
。
重申一下:这段代码和我正在使用的测试用例与 Pickle 完美配合。它只有 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序列化时。
也许您正在(或曾经)使用 CPython 3.4?如果是,there was a bug that should be fixed already.
我也有这个问题,不是在我的电脑上,它有 Python 3.4.4,而是在 Github 的 Travis 上,它使用的是 3.4.2。