Browse Source

Wrap non-AppCommandError exceptions with TransformerError

pull/7750/head
Rapptz 3 years ago
parent
commit
1f3aa377c3
  1. 9
      discord/app_commands/errors.py
  2. 10
      discord/app_commands/transformers.py

9
discord/app_commands/errors.py

@ -92,10 +92,11 @@ class TransformerError(AppCommandError):
This inherits from :exc:`~discord.app_commands.AppCommandError`. This inherits from :exc:`~discord.app_commands.AppCommandError`.
.. note:: If an exception occurs while converting that does not subclass
:exc:`AppCommandError` then the exception is wrapped into this exception.
If the transformer raises a custom :exc:`AppCommandError` then it will The original exception can be retrieved using the ``__cause__`` attribute.
be propagated rather than wrapped into this exception. Otherwise if the exception derives from :exc:`AppCommandError` then it will
be propagated as-is.
.. versionadded:: 2.0 .. versionadded:: 2.0

10
discord/app_commands/transformers.py

@ -44,7 +44,7 @@ from typing import (
Union, Union,
) )
from .errors import TransformerError from .errors import AppCommandError, TransformerError
from .models import AppCommandChannel, AppCommandThread, Choice from .models import AppCommandChannel, AppCommandThread, Choice
from ..channel import StageChannel, StoreChannel, VoiceChannel, TextChannel, CategoryChannel from ..channel import StageChannel, StoreChannel, VoiceChannel, TextChannel, CategoryChannel
from ..enums import AppCommandOptionType, ChannelType from ..enums import AppCommandOptionType, ChannelType
@ -136,7 +136,13 @@ class CommandParameter:
raise TransformerError(value, self.type, self._annotation) raise TransformerError(value, self.type, self._annotation)
return choice return choice
return await self._annotation.transform(interaction, value) try:
return await self._annotation.transform(interaction, value)
except AppCommandError:
raise
except Exception as e:
raise TransformerError(value, self.type, self._annotation) from e
return value return value

Loading…
Cancel
Save