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,

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