'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 и по-прежнему получаю эту ошибку.


person TheUnity    schedule 29.07.2018    source источник


Ответы (1)


Вы используете новый синтаксис _1 _ / _ 2_ для определения и выполнения совместных подпрограмм, но не сделали полного переключения. Здесь вам нужно использовать await:

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

Если вы хотите придерживаться старого синтаксиса, предшествовавшего Python 3.5, отметьте свою функцию как сопрограмму с помощью тега _ 5_ декоратор, удалите 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.

person Martijn Pieters    schedule 29.07.2018