Ошибки команды, которые вы пытаетесь перехватить, должны быть вызваны до выполнения обратного вызова для команды (из проверок, преобразователей и т. Д. c). Исключения, возникающие при обратном вызове, будут заключены в CommandInvokeError
, поэтому понятно, откуда они берутся.
Например, у вас может быть обработчик ошибок, например
@bot.event
async def on_command_error(ctx, error):
if isinstance(error, commands.TooManyArguments):
await ctx.send('too many arguments')
elif isinstance(error, commands.CommandInvokeError):
await ctx.send('invoke')
else:
await ctx.send('should not happen')
и команда типа
@bot.command
async def doError(ctx, type : int):
raise commands.TooManyArguments
Если вы фактически передаете слишком много аргументов команде, то механизмы обработки команд сгенерируют исключение TooManyArguments
и передадут его обработчику. С другой стороны, если ваш обратный вызов выдаст исключение TooManyArguments
, то механизм команд примет это исключение, обернет его в CommandInvokeError
и передаст его обработчику.