Python 如何使用\u命令\u error()检测AttributeError

Python 如何使用\u命令\u error()检测AttributeError,python,error-handling,discord.py,Python,Error Handling,Discord.py,我试图检测何时有人在服务器外使用命令。我只想在_command _error()函数上有一个,所以我尝试检测属性错误:“NoneType”没有属性“id”。然而,我现在不知道该放什么,我尝试了AttributeError,但它没有检测到它 @bot.event async def on_command_error(ctx, error): if isinstance(error, AttributeError): await ctx.send('You Cannot Use This

我试图检测何时有人在服务器外使用命令。我只想在_command _error()函数上有一个,所以我尝试检测属性错误:“NoneType”没有属性“id”。然而,我现在不知道该放什么,我尝试了AttributeError,但它没有检测到它

@bot.event
async def on_command_error(ctx, error):
  if isinstance(error, AttributeError):
    await ctx.send('You Cannot Use This Command Outside Of The Server')
  else:
    print(error)
有人知道AttributeError现在正在使用的参数是什么吗?
谢谢大家!

Discord.py实际上内置了一个只针对公会命令的检查

因此,在定义discord命令的检查(
@bot.command()
)的正下方(或之前),只添加decorator
@commands.guild\u


如果此命令在服务器外部运行,它将引发异常。您可以使用错误处理程序捕获此错误并相应地发送消息。

您不应该在错误处理程序中处理这样的错误,但是您可以使用以下方法来处理:

@bot.event
命令上的异步定义错误(ctx,错误):
#如果命令内部发生错误,
#discord.py用“commands.CommandInvokeError”来包装它
#它具有“original”属性,即“original”错误
error=getattr(错误,“原始”,错误)
如果存在(错误、属性错误):
...
elif isinstance(错误,命令.丢失权限):

您知道没有结束引号吗?那只是在这里,我在代码中正确地使用了它。