You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Kutana框架时pickle序列化Game类对象报错求助

问题:Pickle序列化Kutana插件中的Game实例失败

我正在使用Kutana框架,相关代码如下:

plugins/test.py

from kutana import Plugin
import pickle

plugin = Plugin(name="Tictactoe",
                description="Tictactoe Game",
                invites={},
                games=[])


@plugin.on_start()
async def _():
    plugin.games = [Game()]


# Backup games when bot is shutting down
@plugin.on_shutdown()
async def _():
    try:
        with open("games.pickle", "wb") as f:
            pickle.dump(plugin.games, f)
    except Exception as e:
        print(e)


class Game:
    def __init__(self):
        pass

run.py

from kutana import Kutana, load_plugins

# Create application
app = Kutana()

# Load and register plugins
app.add_plugins(load_plugins("plugins/"))

if __name__ == "__main__":
    # Run application
    app.run()

当plugin.games为空时,pickle可正常序列化;但放入Game类实例后,备份时会报错:

Traceback (most recent call last):
  File "C:\Users\root\Desktop\Celestiana\plugins\games\tictactoe.py", line 17, in _
    pickle.dump(pl.games, f)
_pickle.PicklingError: Can't pickle <class 'plugins/games\tictactoe.py.Game'>: import of module 'plugins/games\\tictactoe.py' failed

我尝试使用pickle.dump(plugin.games, f, fix_imports=True)但无效,请问该如何修复?


解决方案

方法一:将Game类移到独立可导入模块

  1. 在plugins目录下创建game_classes.py文件,存放Game类:
# plugins/game_classes.py
class Game:
    def __init__(self):
        pass
  1. 在plugins/test.py中相对导入该类:
from kutana import Plugin
import pickle
from .game_classes import Game  # 相对导入

plugin = Plugin(name="Tictactoe",
                description="Tictactoe Game",
                invites={},
                games=[])

# 后续代码保持不变
  1. 确保plugins目录下有__init__.py(空文件即可),让Python识别为合法包。

方法二:手动修正类的模块路径

如果不想拆分模块,可在Game类定义后手动设置__module__属性,让pickle能正确识别模块路径:

class Game:
    def __init__(self):
        pass

# 根据你的插件实际路径设置,比如插件是games/tictactoe.py就写"plugins.games.tictactoe"
Game.__module__ = "plugins.test"

内容的提问来源于stack exchange,提问作者user14038884

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:15:19