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

如何修复discord.py中执行?win @用户命令时出现的KeyError报错

错误原因

你的win命令逻辑仅在未传入@用户参数时,才会调用open_wins对发起命令的用户做数据初始化校验;当传入被@的目标用户时,程序没有对该用户做是否已存在于JSON文件的校验,直接尝试读取其ID对应的胜场字段,自然会抛出KeyError。

修复方案

仅需要调整win命令的逻辑,把初始化操作移到if分支外部,无论是否传入@用户参数都先执行初始化校验即可,其他两个辅助函数不需要修改。

修复后的win命令代码:

@client.command()
@commands.has_role("Draft Manager")
async def win(ctx,member: discord.Member = None ):
    if not member:
        member = ctx.author
    # 对目标用户统一做初始化校验,无记录则自动创建
    await open_wins(member)

    users = await get_win_data()
    user = member
    onewin = 1

    # 可选优化提示语,适配给他人加胜场的场景
    if user == ctx.author:
        await ctx.send(f"You just gained {onewin} win ")
    else:
        await ctx.send(f"{user.mention} just gained {onewin} win ")

    users[str(user.id)]["Wins"] += onewin

    with open("leaderboard.json", "w") as f:
        json.dump(users, f, indent=4)
逻辑说明

open_wins函数本身已经内置了用户存在性判断,已存在记录的用户调用该函数不会产生任何副作用,所以直接把调用逻辑移到分支外即可覆盖所有使用场景,自动为无记录的用户创建ID和胜场条目。

内容的提问来源于stack exchange,提问作者Alex is funny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:45:03