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

如何用Python在成员离开服务器时删除JSON内的指定成员条目

核心问题定位

你当前代码无法生效的核心原因是键类型不匹配。
JSON格式规范要求所有对象键必须为字符串类型,因此json.load()读取文件后,字典内的成员ID全是字符串形式(比如你示例中的"801014207230640168"),但discord.py传入的member.id是整数类型。直接用整数做del索引时,根本匹配不到对应的字符串键,会直接抛出KeyError中断事件执行,完全达不到删除数据的效果。

可直接使用的修正实现

修正逻辑仅需调整几处核心问题:

  • 将整数形式的member.id转换为字符串,和JSON内的键类型保持一致
  • 增加键存在判断,避免成员无存档记录时直接报错中断程序
  • 补充文件编码参数,避免Windows环境下读取含中文的存档时出现乱码

修正后代码如下:

@client.event
async def on_member_remove(member):
    with open("users.json", "r", encoding="utf-8") as f:
        users = json.load(f)

    # 统一用字符串形式的ID做键,匹配JSON内的存储格式
    member_id_str = str(member.id)
    # 仅当成员存在存档时才执行删除
    if member_id_str in users:
        del users[member_id_str]
        with open("users.json", "w", encoding="utf-8") as f:
            # 加缩进参数让JSON结构更清晰,关闭ensure_ascii避免中文转义
            json.dump(users, f, indent=2, ensure_ascii=False)
通用排查建议
  • 所有读写用户存档的逻辑,统一使用字符串类型的成员ID作为字典键,不要在代码里混用整数、字符串两种ID格式做索引,从根源避免读写匹配错位的问题
  • 测试时可在删除逻辑前后插入简单的控制台打印语句,确认事件正常触发、键匹配逻辑运行正常,排除intents配置、事件监听失效类问题
  • 操作JSON文件时不要省略encoding="utf-8"参数,Windows环境下默认的本地编码会导致含中文的存档读取、写入出现乱码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 19:27:04