Обработка ошибок
Это содержание было взято непосредственно из
документации и унаследовано от
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
.