Skip to content
This repository was archived by the owner on Nov 23, 2017. It is now read-only.
This repository was archived by the owner on Nov 23, 2017. It is now read-only.

loop.set_debug(True) makes "TypeError: __await__() returned a coroutine" disappear  #451

Open
@diefans

Description

@diefans

My python version is 3.5.2

The following example illustrates the problem:

import asyncio


class Foo:
    async def __await__(self):
        return "Foo"


async def run_foo():
    foo = Foo()
    return await foo


if __name__ == '__main__':
    for debug in (False, True):
        loop = asyncio.new_event_loop()
        loop.set_debug(debug)

        print("debug =", debug, "results in:", end=" ")
        try:
            result = loop.run_until_complete(run_foo())
            print(result)

        except TypeError as ex:
            print(ex)

        loop.close()
debug = False results in: __await__() returned a coroutine
debug = True results in: Foo

This behaviour was indeed surprising when I begun to work and experiment with asyncio, where most of the time I enabled debug, but in unit testing then disabled it...

I am wondering, if the TypeError for a coroutine returned by await() enforced by https://www.python.org/dev/peps/pep-0492/#await-expression is really necessary. Btw to use await syntax in await I always return the result of the await method of an inner coroutine, e.g.:

class Foo:
    def __await__(self):
        async def coro():
            return await self.something()
        return coro().__await__()

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions