Closed
Description
TaskGroup suppresses grouped exceptions due to parent task cancellation
The suggestion was to always check for Cancellation in every finally block in async context managers, however sometimes there's no finally block visible and the problem applies to synchronous context managers too
In this demo I'd expect to be able to print: "handled attribute error"
import asyncio
import contextlib
async def child(sock):
try:
with contextlib.closing(sock):
await asyncio.sleep(2)
except Exception as e:
print(f"child task got error: {type(e)=} {e=}")
raise
class Sock:
async def aclose(self):
await asyncio.sleep(1)
async def main():
try:
sock = Sock()
async with asyncio.timeout(1):
async with asyncio.TaskGroup() as tg:
# Make two concurrent calls to child()
tg.create_task(child(Sock()))
tg.create_task(child(Sock()))
async with contextlib.aclosing(sock):
await asyncio.sleep(2)
except* AttributeError:
print("handled attribute error")
asyncio.run(main())