#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. О, я понимаю. Спасибо!