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
相关产品推荐
相关产品推荐

