asyncio: Fix _format_coroutine for coroutine-like objects w/o __name__

Some built-in coroutine-like objects might not have __name__ or
__qualname__. A good example of such are 'asend', 'aclose' and
'athrow' coroutine methods of asynchronous generators.
This commit is contained in:
Yury Selivanov 2016-11-08 19:16:01 -05:00
parent 70b72f0f96
commit 6cc495e9e2
2 changed files with 12 additions and 4 deletions

View file

@ -262,8 +262,12 @@ def _format_coroutine(coro):
assert iscoroutine(coro)
if not hasattr(coro, 'cr_code') and not hasattr(coro, 'gi_code'):
# Most likely a Cython coroutine.
coro_name = getattr(coro, '__qualname__', coro.__name__)
# Most likely a built-in type or a Cython coroutine.
# Built-in types might not have __qualname__ or __name__.
coro_name = getattr(
coro, '__qualname__',
getattr(coro, '__name__', type(coro).__name__))
coro_name = '{}()'.format(coro_name)
running = False