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.
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.
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