diff options
| author | Rapptz <[email protected]> | 2019-07-27 23:07:48 -0400 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2019-07-27 23:07:48 -0400 |
| commit | 7a8c9e66d9c43a539fb78107ce3f51f16c7f30a2 (patch) | |
| tree | 0779789a5f4b0c0e35ef536e699721de4f746a23 | |
| parent | Version bump for development purposes. (diff) | |
| download | discord.py-7a8c9e66d9c43a539fb78107ce3f51f16c7f30a2.tar.xz discord.py-7a8c9e66d9c43a539fb78107ce3f51f16c7f30a2.zip | |
[tasks] Add Loop.exception for more reliable exception retrieval.
| -rw-r--r-- | discord/ext/tasks/__init__.py | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/discord/ext/tasks/__init__.py b/discord/ext/tasks/__init__.py index 9d0e46bb..6a7c9437 100644 --- a/discord/ext/tasks/__init__.py +++ b/discord/ext/tasks/__init__.py @@ -40,6 +40,7 @@ class Loop: self._is_being_cancelled = False self._has_failed = False self._stop_next_iteration = False + self._exception = None if self.count is not None and self.count <= 0: raise ValueError('count must be greater than 0 or None.') @@ -81,8 +82,9 @@ class Loop: except asyncio.CancelledError: self._is_being_cancelled = True raise - except Exception: + except Exception as e: self._has_failed = True + self._exception = e log.exception('Internal background task failed.') raise finally: @@ -91,6 +93,7 @@ class Loop: self._current_loop = 0 self._stop_next_iteration = False self._has_failed = False + self._exception = None def __get__(self, obj, objtype): if obj is None: @@ -255,6 +258,16 @@ class Loop: """ return self._has_failed + def exception(self): + """Optional[:class:`Exception`]: The exception that the internal task failed with. + + .. versionadded:: 1.3.0 + """ + if self._exception is not None: + return self._exception + if self._task is not None: + return self._task.exception() + def before_loop(self, coro): """A decorator that registers a coroutine to be called before the loop starts running. |