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

Discord机器人spam命令出现KeyError,无法获取text_max反而返回UserID求助

问题解决:Discord机器人spam命令触发KeyError错误

错误原因

代码逻辑顺序完全搞反了——你先直接尝试获取用户的text_max值,之后才判断用户ID是否存在于users字典中。当用户ID不在users里时,直接访问users[str(ctx.author.id)]必然触发KeyError。

修复方案

调整代码执行顺序,先做用户存在性检查,再去访问对应的字段:

async def spam(ctx, message, amount):
    users = await get_paid_data()
    user_id = str(ctx.author.id)
    
    # 先验证用户是否在数据字典中
    if user_id not in users:
        em = discord.Embed(color=0x000000, description="你无权限使用该功能,请先开通服务")
        await ctx.send(embed=em)
        return
    
    spammers = users[user_id]['text_max']
    
    if amount > spammers:
        if users[user_id]['vip'] == 'Y':
            timeleft = datetime.strptime(users[user_id]['expDate'], '%Y-%m-%d') - datetime.now()
            if timeleft.days <= 0:
                em = discord.Embed(color=0x000000, description="你的工具套餐已过期")
                await ctx.send(embed=em)

额外优化建议

  • 重复的users[user_id]可以用变量缓存,减少重复索引操作:
    user_data = users[user_id]
    spammers = user_data['text_max']
    # 后续直接用user_data['vip']、user_data['expDate']即可
    
  • 可以额外添加text_max字段的存在性检查,避免后续可能出现的同类错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:15:28