Browse Source

Fix wrapping into StopIteration of return values in generators and coroutines (#644)

pull/622/merge
Yury Selivanov 9 years ago
committed by GitHub
parent
commit
b7c9150b68
  1. 15
      Lib/test/test_coroutines.py
  2. 3
      Objects/genobject.c

15
Lib/test/test_coroutines.py

@ -1103,6 +1103,21 @@ class CoroutineTest(unittest.TestCase):
"coroutine is being awaited already"):
waiter(coro).send(None)
def test_await_16(self):
# See https://bugs.python.org/issue29600 for details.
async def f():
return ValueError()
async def g():
try:
raise KeyError
except:
return await f()
_, result = run_async(g())
self.assertIsNone(result.__context__)
def test_with_1(self):
class Manager:
def __init__(self, name):

3
Objects/genobject.c

@ -574,8 +574,7 @@ _PyGen_SetStopIterationValue(PyObject *value)
PyObject *e;
if (value == NULL ||
(!PyTuple_Check(value) &&
!PyObject_TypeCheck(value, (PyTypeObject *) PyExc_StopIteration)))
(!PyTuple_Check(value) && !PyExceptionInstance_Check(value)))
{
/* Delay exception instantiation if we can */
PyErr_SetObject(PyExc_StopIteration, value);

Loading…
Cancel
Save