Python 3.x 我需要同时解决使用“保存对象”时出现的错误;搁置;,并使抛出该错误的代码总体上更加健壮

Python 3.x 我需要同时解决使用“保存对象”时出现的错误;搁置;,并使抛出该错误的代码总体上更加健壮,python-3.x,Python 3.x,我正在用类似流氓的教程自学Python。我在保存游戏时遇到了一个错误,我正在尝试解决它 我的保存游戏代码非常简单,如下所示: def save_game(engine: Engine) -> None: with shelve.open('savegame', 'n') as data_file: data_file['engine'] = engine 然后“引擎”对象有我需要的所有游戏状态信息。大多数时候,它工作得很好 但是,我发现在我使用火球滚动后触发自动保

我正在用类似流氓的教程自学Python。我在保存游戏时遇到了一个错误,我正在尝试解决它

我的保存游戏代码非常简单,如下所示:

def save_game(engine: Engine) -> None:
    with shelve.open('savegame', 'n') as data_file:
        data_file['engine'] = engine
然后“引擎”对象有我需要的所有游戏状态信息。大多数时候,它工作得很好

但是,我发现在我使用火球滚动后触发自动保存时,它会出错:

AttributeError: Can't pickle local object 'FireballDamageConsumable.get_action.<locals>.<lambda>'

啊哈!看起来这个问题解决了我的问题:

将其插入import语句可以实现以下目的:

from dill import Pickler, Unpickler
shelve.Pickler = Pickler
shelve.Unpickler = Unpickler
from dill import Pickler, Unpickler
shelve.Pickler = Pickler
shelve.Unpickler = Unpickler