[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.
This commit is contained in:
Rapptz 2016-06-10 20:32:05 -04:00
parent d914c0a4e4
commit 43bbecd519
2 changed files with 15 additions and 2 deletions

View File

@ -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

View File

@ -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))