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

discord.py头像命令输入角色/非成员报错如何实现自定义错误提示

问题根因

你代码里的try...except无法捕获报错的原因是,MemberNotFound异常发生在discord.py的参数转换阶段,此时还没有进入你写的函数逻辑内部,所以函数内部的异常捕获不会生效。你参数标注的discord.Member类型会触发框架自动做类型转换,当输入为角色、不存在的用户ID/用户名时,转换失败就会直接抛出该异常。

解决方案

使用discord.py提供的命令专属错误装饰器@命令名.error来处理该类异常,具体实现步骤如下:

  1. 首先导入对应的错误类:
from discord.ext.commands import MemberNotFound
  1. 在你现有的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:06:08