Issue 33248: await behaves different with or without PYTHONASYNCIODEBUG (original) (raw)

Issue33248

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:59 admin set github: 77429
2018-04-10 02:04:12 Jonas Obrist set status: open -> closedresolution: not a bugmessages: + stage: resolved
2018-04-09 10:53:28 Jonas Obrist set messages: +
2018-04-09 10:23:23 Jonas Obrist set files: + nta.pymessages: + title: Different behavior on macos and linux (docker) with __await__ -> __await__ behaves different with or without PYTHONASYNCIODEBUG
2018-04-09 10:10:20 Jonas Obrist create