异步函数Python 3.6.5 aiohttp中的'yield from'

时间:2018-07-29 19:47:52

标签: python python-3.6 aiohttp yield-from

SyntaxError:异步函数内部的“ yield from”

async def handle(request):
    for m in (yield from request.post()):
        print(m)
    return web.Response()

以前使用过python3.5,找到了pep525,安装了python3.6.5,仍然收到此错误。

1 个答案:

答案 0 :(得分:2)

您正在使用新的async / await语法来定义和执行协同例程,但是尚未进行完全切换。您需要在此处使用await

async def handle(request):
    post_data = await request.post()
    for m in post_data:
        print(m)
    return web.Response()

如果您想使用Python 3.5之前的旧语法,请使用@asyncio.coroutine decorator将函数标记为协程,并放下async关键字,而改用yield fromawait

@async.coroutine
def handle(request):
    post_data = yield from request.post()
    for m in post_data:
        print(m)
    return web.Response()

,但是该语法正在逐步淘汰,并且不像新语法那样容易发现和可读。仅在需要编写与旧Python版本兼容的代码时,才应使用此表单。