New submission from Nathaniel Smith <[email protected]>:
Example (minimal version of https://github.com/python-trio/trio/issues/425):
-----
async def open_file():
pass
async def main():
async with open_file(): # Should be 'async with await open_file()'
pass
coro = main()
coro.send(None)
-----
Here we accidentally left out an 'await' on the call to 'open_file', so the
'async with' tries to look up 'CoroutineType.__aexit__', which obviously
doesn't exist, and the program crashes with an AttributeError("__aexit__"). Yet
weirdly, this doesn't trigger a warning about 'open_file' being unawaited. It
should!
Yury's theory: maybe BEFORE_ASYNC_WITH's error-handling path is forgetting to
DECREF the object.
----------
components: asyncio
messages: 311052
nosy: asvetlov, giampaolo.rodola, njs, yselivanov
priority: normal
severity: normal
status: open
title: 'async with' somehow suppresses unawaited coroutine warnings
versions: Python 3.5, Python 3.6, Python 3.7, Python 3.8
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue32703>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com