mirror of
https://github.com/python/cpython
synced 2024-09-05 08:17:45 +00:00
Fix wrapping into StopIteration of return values in generators and coroutines (#644)
This commit is contained in:
parent
2b27e2e6a3
commit
b7c9150b68
|
@ -1103,6 +1103,21 @@ async def waiter(coro):
|
|||
"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):
|
||||
|
|
|
@ -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…
Reference in a new issue