This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: __await__ behaves different with or without PYTHONASYNCIODEBUG
Type: behavior Stage: resolved
Components: asyncio Versions: Python 3.6
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: Jonas Obrist, asvetlov, yselivanov
Priority: normal Keywords:

Created on 2018-04-09 10:10 by Jonas Obrist, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
nta.py Jonas Obrist, 2018-04-09 10:10
nta.py Jonas Obrist, 2018-04-09 10:23
Messages (4)
msg315119 - (view) Author: Jonas Obrist (Jonas Obrist) * Date: 2018-04-09 10:10
The attached code runs fine on MacOS using 3.6.5 from homebrew. However on Windows (I tested on 3.6.4 with the 32bit installer from the website) and Linux (using the python:3.6.5 docker image) it errors with "TypeError: cannot 'yield from' a coroutine object in a non-coroutine generator".

On MacOS I tried both _UnixSelectorEventLoop with Kqueue and Select selectors, on Linux _UnixSelectorEventLoop with Epoll and Select.

Which behavior is the expected one?

As an aside, what I'm trying to achieve is to have an awaitable object that which if unawaited evaluates to False if used in if statements.
msg315122 - (view) Author: Jonas Obrist (Jonas Obrist) * Date: 2018-04-09 10:23
I've just realized the difference between the environments wasn't the operating system, but PYTHONASYNCIODEBUG. If it is set, the code works, however if it is unset the code does not work. See the updated (attached) code for reference.
msg315124 - (view) Author: Jonas Obrist (Jonas Obrist) * Date: 2018-04-09 10:53
On 9c463ec88ba21764f6fff8e01d6045a932a89438 (master/3.7) both cases fail to execute. I would argue that this code should be allowed...
msg315157 - (view) Author: Jonas Obrist (Jonas Obrist) * Date: 2018-04-10 02:04
I realized I have to call __await__ of the inner coroutine object in NonTrueAwaitable.__await__. This is not a bug, but my mistake.
History
Date User Action Args
2022-04-11 14:58:59adminsetgithub: 77429
2018-04-10 02:04:12Jonas Obristsetstatus: open -> closed
resolution: not a bug
messages: + msg315157

stage: resolved
2018-04-09 10:53:28Jonas Obristsetmessages: + msg315124
2018-04-09 10:23:23Jonas Obristsetfiles: + nta.py

messages: + msg315122
title: Different behavior on macos and linux (docker) with __await__ -> __await__ behaves different with or without PYTHONASYNCIODEBUG
2018-04-09 10:10:20Jonas Obristcreate