Browse Source

[commands] Exceptions raised while invocation raise CommandInvokeError.

This change should make it a bit more intuitive to get the original
exception without having the gotcha of checking ``isinstance`` inside
the error handler.
pull/204/merge
Rapptz 9 years ago
parent
commit
43bbecd519
  1. 2
      discord/ext/commands/core.py
  2. 15
      discord/ext/commands/errors.py

2
discord/ext/commands/core.py

@ -47,7 +47,7 @@ def inject_context(ctx, coro):
try:
ret = yield from coro(*args, **kwargs)
except Exception as e:
raise CommandError("Exception raised while executing command") from e
raise CommandInvokeError(e) from e
return ret
return wrapped

15
discord/ext/commands/errors.py

@ -28,7 +28,7 @@ from discord.errors import DiscordException
__all__ = [ 'CommandError', 'MissingRequiredArgument', 'BadArgument',
'NoPrivateMessage', 'CheckFailure', 'CommandNotFound',
'DisabledCommand' ]
'DisabledCommand', 'CommandInvokeError' ]
class CommandError(DiscordException):
"""The base exception type for all command related errors.
@ -74,3 +74,16 @@ class CheckFailure(CommandError):
class DisabledCommand(CommandError):
"""Exception raised when the command being invoked is disabled."""
pass
class CommandInvokeError(CommandError):
"""Exception raised when the command being invoked raised an exception.
Attributes
-----------
original
The original exception that was raised. You can also get this via
the ``__cause__`` attribute.
"""
def __init__(self, e):
self.original = e
super().__init__('Command raised an exception: {0.__class__.__name__}: {0}'.format(e))

Loading…
Cancel
Save