Chris Jerdonek added the comment: I noticed that the future defined by asyncio.gather(sleep) is in a "pending" state immediately after the asyncio.TimeoutError.
One workaround is to wait for the cancellation to finish: @asyncio.coroutine def main(): sleep = asyncio.sleep(0.2) future = asyncio.gather(sleep) try: yield from asyncio.wait_for(future, timeout=0.1) except asyncio.TimeoutError: print(f'future: {future}') try: yield from future except asyncio.CancelledError: print(f'future: {future}') yield from asyncio.sleep(0.1) asyncio.get_event_loop().run_until_complete(main()) Outputs: future: <_GatheringFuture pending> future: <_GatheringFuture finished exception=CancelledError()> Another option is to pass return_exceptions=True to gather(). This appears to make the log messages you were concerned about go away: future: <_GatheringFuture pending> ---------- nosy: +chris.jerdonek _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue29432> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com