'yield from' внутри асинхронной функции Python 3.6.5 aiohttp

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 ответ

Решение

Вы используете новый 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 декоратор, бросьте async ключевое слово и использовать yield from вместо await:

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

но этот синтаксис постепенно сокращается, и его не так легко обнаружить и прочитать, как новый синтаксис. Вы должны использовать эту форму, только если вам нужно написать код, совместимый с более старыми версиями Python.

Другие вопросы по тегам