Skip to main content

Обработка ошибок

Примечание

Это содержание было взято непосредственно из документации и унаследовано от discord.py. Скорее всего, в будущем оно будет переписано.

Когда наши команды не будут выполнены, мы по умолчанию получим "шумную" ошибку в stderr вашей консоли, которая сообщает нам, что произошла ошибка, которая была молча проигнорирована.

Чтобы обрабатывать наши ошибки, мы должны использовать нечто, называемое обработчиком ошибок. Существует глобальный обработчик ошибок, называемый on_command_error(), который работает как любое другое событие в Event Reference. Этот глобальный обработчик ошибок вызывается для каждой достигнутой ошибки.

Однако в большинстве случаев мы хотим обработать ошибку, локальную для самой команды. К счастью, команды поставляются с локальными обработчиками ошибок, которые позволяют нам делать именно это. Сначала мы оформляем функцию обработчика ошибок с помощью Command.error():

@bot.command()
async def info(ctx, *, member: disnake.Member):
"""Сообщает вам некоторую информацию об участнике."""
msg = f"{member} присоединился {member.joined_at} и имеет {len(member.roles)} ролей."
await ctx.send(msg)


@info.error
async def info_error(ctx, error):
if isinstance(error, commands.BadArgument):
await ctx.send("Я не смог найти этого участника...")

Первым параметром обработчика ошибок ссылается на Context, в то время как второе - исключение является производным от CommandError. Список ошибок находится на странице документации Exceptions.