New submission from Chris Jerdonek <chris.jerdo...@gmail.com>:
This issue is about how if a coroutine is wrapped in a Task with asyncio.ensure_future(), then portions of the exception chain can be lost. Specifically, if you run the following code, then ValueError will be raised with exc.__context__ equal to the KeyError: import asyncio async def raise_error(): raise ValueError async def main(): try: raise KeyError except Exception as exc: future = raise_error() # Uncommenting the next line makes exc.__context__ None below. # future = asyncio.ensure_future(future) try: await future except Exception as exc: print(f'error: {exc!r}, context: {exc.__context__!r}') raise asyncio.get_event_loop().run_until_complete(main()) However, if you uncomment the `asyncio.ensure_future()` line, then the ValueError will be raised with no __context__. I originally raised this issue a couple years ago here: https://mail.python.org/pipermail/async-sig/2017-November/000403.html There it was suggested that this was a special case of this issue: https://bugs.python.org/issue29587 However, after writing code to fix that, this issue still exists. ---------- components: asyncio messages: 367832 nosy: asvetlov, chris.jerdonek, yselivanov priority: normal severity: normal status: open title: asyncio.ensure_future() breaks implicit exception chaining type: behavior versions: Python 3.6, Python 3.7, Python 3.8, Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue40466> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com