Bug report
Bug description:
I asked a question on stackoverflow because I found a strange error while writing code that makes use an async generator function and the built-in anext() function when using a tuple value for the default argument of anext().
One of the stackoverflow answers contains a good analysis and a possible cause of the problem.
The failing code is the second line with anext():
import asyncio async def generator(it=None): if it is not None: yield (it, it) async def my_func(): # results in a=1 b=1 a, b = await anext(generator(1), (2, 3)) # results in no printing async for a, b in generator(): print(a, b) # raises exception a, b = await anext(generator(), (2, 3)) loop = asyncio.new_event_loop() loop.run_until_complete(my_func())
It raises this unexpected exception:
StopAsyncIteration The above exception was the direct cause of the following exception: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/manuel/.pyenv/versions/3.12.0/lib/python3.12/asyncio/base_events.py", line 664, in run_until_complete return future.result() ^^^^^^^^^^^^^^^ File "<stdin>", line 6, in my_func SystemError: <class 'StopIteration'> returned a result with an exception set
CPython versions tested on:
3.11, 3.12, 3.13
Operating systems tested on:
macOS
Linked PRs
- gh-128078: Clear exception in
anextbefore calling_PyGen_SetStopIterationValue#128780 - [3.12] gh-128078: Clear exception in
anextbefore calling_PyGen_SetStopIterationValue(GH-128780) #128784 - [3.13] gh-128078: Clear exception in
anextbefore calling_PyGen_SetStopIterationValue(GH-128780) #128785 - gh-128078: Simplify logic in
_PyGen_SetStopIterationValue(follow-up to gh-128780) #128287 - [3.13] gh-128078: Use
PyErr_SetRaisedExceptionin_PyGen_SetStopIterationValue(GH-128287) #128789 - [3.12] gh-128078: Use
PyErr_SetRaisedExceptionin_PyGen_SetStopIterationValue(GH-128287) #128790