discord.py头像命令输入角色/非成员报错如何实现自定义错误提示
问题根因
你代码里的try...except无法捕获报错的原因是,MemberNotFound异常发生在discord.py的参数转换阶段,此时还没有进入你写的函数逻辑内部,所以函数内部的异常捕获不会生效。你参数标注的discord.Member类型会触发框架自动做类型转换,当输入为角色、不存在的用户ID/用户名时,转换失败就会直接抛出该异常。
解决方案
使用discord.py提供的命令专属错误装饰器@命令名.error来处理该类异常,具体实现步骤如下:
- 首先导入对应的错误类:
from discord.ext.commands import MemberNotFound
- 在你现有的avatar命令代码下方,新增错误处理逻辑:
@avatar.error async def avatar_error(ctx, error): now = datetime.now() current_time = now.strftime("%H:%M") # 处理成员未找到的错误 if isinstance(error, MemberNotFound): embed = discord.Embed( title = "查询失败", description = "未找到对应成员,请确认你输入的是正确的用户@、用户名或用户ID,当前不支持查询角色头像", color = 0xf461ff ) embed.set_footer(text=f"Requested by {ctx.author} at {current_time}") await ctx.reply(embed=embed, mention_author=False) # 处理其他未知错误 else: embed = discord.Embed( title = "运行错误", description = "执行命令时发生未知错误,请稍后重试", color = 0xf461ff ) embed.set_footer(text=f"Requested by {ctx.author} at {current_time}") await ctx.reply(embed=embed, mention_author=False)
额外优化建议
你原函数里存在大量重复的embed生成代码,可以抽成单独的工具函数复用,同时你原代码的except块中直接引用了userAvatarUrl变量,如果异常发生在该变量赋值之前,会触发新的未定义变量错误,建议删除原函数里的try...except块,所有错误统一走上面的错误处理器处理即可。
内容的提问来源于stack exchange,提问作者MenIndo
相关产品推荐
相关产品推荐

