Merge 3.5 (issue #26221)
This commit is contained in:
commit
a8ac8e336b
|
@ -341,6 +341,9 @@ class Future:
|
||||||
raise InvalidStateError('{}: {!r}'.format(self._state, self))
|
raise InvalidStateError('{}: {!r}'.format(self._state, self))
|
||||||
if isinstance(exception, type):
|
if isinstance(exception, type):
|
||||||
exception = exception()
|
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._exception = exception
|
||||||
self._state = _FINISHED
|
self._state = _FINISHED
|
||||||
self._schedule_callbacks()
|
self._schedule_callbacks()
|
||||||
|
|
|
@ -76,6 +76,10 @@ class FutureTests(test_utils.TestCase):
|
||||||
f = asyncio.Future(loop=self.loop)
|
f = asyncio.Future(loop=self.loop)
|
||||||
self.assertRaises(asyncio.InvalidStateError, f.exception)
|
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)
|
f.set_exception(exc)
|
||||||
self.assertFalse(f.cancelled())
|
self.assertFalse(f.cancelled())
|
||||||
self.assertTrue(f.done())
|
self.assertTrue(f.done())
|
||||||
|
|
Loading…
Reference in New Issue