await вызывает SyntaxError, когда вызываемая функция имеет ключевое слово async: Python
У меня есть функция с async
Ключевое слово в отдельном скрипте, это:
async def search_gifs(self, query:str, limit:int = 25, offset:int = 0, rating: rating = rating.G, lang:language = None):
if language == None:
lang_to_use = self.lang
result = await requests.get(self.end_point + "gifs/search", api_key = self.key, q = query, limit=limit, offset=offset, rating=rating.value, lang=lang_to_use.value)
print(result.json())
Тем не менее, когда я пытаюсь вызвать его с await
поднимает SintaxError
,
await client.search_gifs("lol")
>>> await client.search_gifs("lol")
^
SyntaxError: invalid syntax
(search_gifs
это функция внутри Client
учебный класс)
Я делаю что-то неправильно? Я использую Python 3.6
1 ответ
await
действует только внутри async def
так что это не работает на верхнем уровне. Это потому, что контракт await
является то, что он должен быть в состоянии приостановить текущую сопрограмму, и на верхнем уровне нет сопрограммы для приостановки.
Чтобы проверить сопрограмму от переводчика, используйте asyncio.run
или в Python 3.6 run_until_complete
:
>>> asyncio.get_event_loop().run_until_complete(client.search_gifs("lol"))
Другая проблема с вашим кодом заключается в том, что await requests.get(...)
не будет работать, так как requests
не является асинхронной библиотекой Вместо этого используйте асинхронную библиотеку, такую как aiohttp
,