为什么asyncio.iscoroutine在生成器上返回True?

时间:2018-09-25 20:17:07

标签: python python-3.x python-asyncio

请考虑以下功能:

def test(): yield 1

asyncio.iscoroutine()方法将为方法True返回test()。要注意的另一件事是inspect.iscoroutine()将返回False

asyncio为什么认为这是协程?无论如何,似乎其中之一弄错了。

1 个答案:

答案 0 :(得分:1)

这看起来像是新的Python 3.7 asyncio文档中的文档错误。在提问和回答时,new docs

  

如果obj是协程对象,则返回True。

     

此方法与inspect.iscoroutine()不同,因为它返回   对于使用@coroutine装饰的基于生成器的协程,则为true。

old docs

  

如果obj是协程对象,则返回True,该对象可能基于   生成器或异步def协程。

旧文档是正确的; asyncio.iscoroutine认为任何生成器对象都是协程,而不仅仅是由@coroutine装饰的生成器函数创建的协程。


在发问者的issue report之后,文档updated已从asyncio.iscoroutine文档中删除“用@coroutine装饰”。我会发布一个显示旧文本的archive.org链接,但是archive.org没有存档该版本。不过,您仍然可以在github修订历史记录或我刚刚链接的提交中看到旧文本。