'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.