diff options
author | Yury Selivanov <yselivanov@sprymix.com> | 2016-03-02 11:03:53 -0500 |
---|---|---|
committer | Yury Selivanov <yselivanov@sprymix.com> | 2016-03-02 11:03:53 -0500 |
commit | a8ac8e336bcce0c890d171a019589f89f36dfdd5 (patch) | |
tree | c1617afd133d59dad30c493472e785ba1971ccd2 | |
parent | 578bc5b80b248f002373dd4d7cf29920fe18f34b (diff) | |
parent | 1bd030788d1092ba5d5d8b4e2fd75346ded69b3b (diff) | |
download | cpython-git-a8ac8e336bcce0c890d171a019589f89f36dfdd5.tar.gz |
Merge 3.5 (issue #26221)
-rw-r--r-- | Lib/asyncio/futures.py | 3 | ||||
-rw-r--r-- | Lib/test/test_asyncio/test_futures.py | 4 |
2 files changed, 7 insertions, 0 deletions
diff --git a/Lib/asyncio/futures.py b/Lib/asyncio/futures.py index 281fea3375..ddb9cde188 100644 --- a/Lib/asyncio/futures.py +++ b/Lib/asyncio/futures.py @@ -341,6 +341,9 @@ class Future: raise InvalidStateError('{}: {!r}'.format(self._state, self)) if isinstance(exception, type): exception = exception() + if type(exception) is StopIteration: + raise TypeError("StopIteration interacts badly with generators " + "and cannot be raised into a Future") 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 55fdff3f8d..358b190072 100644 --- a/Lib/test/test_asyncio/test_futures.py +++ b/Lib/test/test_asyncio/test_futures.py @@ -76,6 +76,10 @@ class FutureTests(test_utils.TestCase): f = asyncio.Future(loop=self.loop) self.assertRaises(asyncio.InvalidStateError, f.exception) + # StopIteration cannot be raised into a Future - CPython issue26221 + self.assertRaisesRegex(TypeError, "StopIteration .* cannot be raised", + f.set_exception, StopIteration) + f.set_exception(exc) self.assertFalse(f.cancelled()) self.assertTrue(f.done()) |