aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2019-07-27 23:07:48 -0400
committerRapptz <[email protected]>2019-07-27 23:07:48 -0400
commit7a8c9e66d9c43a539fb78107ce3f51f16c7f30a2 (patch)
tree0779789a5f4b0c0e35ef536e699721de4f746a23
parentVersion bump for development purposes. (diff)
downloaddiscord.py-7a8c9e66d9c43a539fb78107ce3f51f16c7f30a2.tar.xz
discord.py-7a8c9e66d9c43a539fb78107ce3f51f16c7f30a2.zip
[tasks] Add Loop.exception for more reliable exception retrieval.
-rw-r--r--discord/ext/tasks/__init__.py15
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.