diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2014-01-31 00:01:54 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2014-01-31 00:01:54 (GMT) |
commit | 95728982825e1c7247d40e8cfcae48b46377baa6 (patch) | |
tree | 9119d9fd73c18e06a7e5c7a9cac54acdb71af1c8 | |
parent | 91445fbeb05f77551a8f83c5188362093916b0e1 (diff) | |
download | cpython-95728982825e1c7247d40e8cfcae48b46377baa6.zip cpython-95728982825e1c7247d40e8cfcae48b46377baa6.tar.gz cpython-95728982825e1c7247d40e8cfcae48b46377baa6.tar.bz2 |
asyncio: Future.set_exception(exc) should instantiate exc if it is a class.
-rw-r--r-- | Lib/asyncio/futures.py | 2 | ||||
-rw-r--r-- | Lib/test/test_asyncio/test_futures.py | 5 |
2 files changed, 7 insertions, 0 deletions
diff --git a/Lib/asyncio/futures.py b/Lib/asyncio/futures.py index 9ee13e3..d09f423 100644 --- a/Lib/asyncio/futures.py +++ b/Lib/asyncio/futures.py @@ -301,6 +301,8 @@ class Future: """ if self._state != _PENDING: raise InvalidStateError('{}: {!r}'.format(self._state, self)) + if isinstance(exception, type): + exception = exception() self._exception = exception self._state = _FINISHED self._schedule_callbacks() diff --git a/Lib/test/test_asyncio/test_futures.py b/Lib/test/test_asyncio/test_futures.py index d3a7412..8a6976b 100644 --- a/Lib/test/test_asyncio/test_futures.py +++ b/Lib/test/test_asyncio/test_futures.py @@ -79,6 +79,11 @@ class FutureTests(unittest.TestCase): self.assertRaises(asyncio.InvalidStateError, f.set_exception, None) self.assertFalse(f.cancel()) + def test_exception_class(self): + f = asyncio.Future(loop=self.loop) + f.set_exception(RuntimeError) + self.assertIsInstance(f.exception(), RuntimeError) + def test_yield_from_twice(self): f = asyncio.Future(loop=self.loop) |