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`.
.. note::
If the transformer raises a custom :exc:`AppCommandError` then it will
be propagated rather than wrapped into this exception.
If an exception occurs while converting that does not subclass
:exc:`AppCommandError` then the exception is wrapped into this exception.
The original exception can be retrieved using the ``__cause__`` attribute.
Otherwise if the exception derives from :exc:`AppCommandError` then it will
be propagated as-is.
.. versionadded:: 2.0

10
discord/app_commands/transformers.py

@ -44,7 +44,7 @@ from typing import (
Union,
)
from .errors import TransformerError
from .errors import AppCommandError, TransformerError
from .models import AppCommandChannel, AppCommandThread, Choice
from ..channel import StageChannel, StoreChannel, VoiceChannel, TextChannel, CategoryChannel
from ..enums import AppCommandOptionType, ChannelType
@ -136,7 +136,13 @@ class CommandParameter:
raise TransformerError(value, self.type, self._annotation)
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

Loading…
Cancel
Save