Как я могу обработать конкретную ошибку CommandInvokeError? [DIscord.py]

#error-handling #discord #discord.py

Вопрос:

Одна из моих функций может привести KeyError к возникновению ошибки. Это вызывает CommandInvokeError вопросы . Однако существуют и другие ошибки, подобные DivisionByZero тем, которые могут привести CommandInvokeError к возникновению проблемы. Я знаю только один способ обработки ошибок, и это:

 @cmd.error
async def cmd_error(self, ctx, error):
    if isinstance(error, commands.CommandInvokeError):
        await ctx.send("Error!")
 

Это будет то же самое для любой ошибки, которая вызывает a CommandInvokeError . Как я могу сделать так, чтобы оно отправляло сообщение только в том случае, если KeyError вызывается a?

Примечание: это в винтике

Комментарии:

1. Хорошо было бы вместо этого обрабатывать эти ошибки с try/except помощью блока

Ответ №1:

 @cmd.error
async def cmd_error(self, ctx, error):
    if isinstance(error, commands.CommandInvokeError):
        if isinstance(error.original, KeyError):
            await ctx.send("Error!")
 

Вы также можете использовать error.__cause__ , это не имеет никакого значения.

Комментарии:

1. Спасибо! PS: что значит, я тоже могу использовать error.__cause__ ? В какой части кода я бы это реализовал?

2. @Ethitlan error.__cause__ -это просто псевдоним для error.original . Так что вы могли бы сделать: if isinstance(error.__cause__, KeyError)

3. О, я понимаю. Спасибо!