当调用的函数具有async关键字时,await引发SyntaxError:Pyvhon

时间:2018-11-01 22:57:37

标签: python async-await python-asyncio

我有一个在单独的脚本中带有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_gifsClient类内部的函数)

我做错什么了吗?我正在使用Python 3.6

1 个答案:

答案 0 :(得分:2)

MATCH (n) WITH n.bar as bar, count(*) AS count WITH collect({bar:bar, count:count}) as barCounts MATCH (n) WITH barCounts, n.foo as foo, count(*) AS count WITH barCounts, collect({foo:foo, count:count}) as fooCounts RETURN barCounts, fooCounts 仅在await内部有效,因此它不适用于顶层。这是因为async def的约定是它必须能够暂停当前协程,并且在顶层没有要暂停的协程。

要从解释程序测试协程,请使用asyncio.run,或者在Python 3.6中使用run_until_complete

await

您的代码的另一个问题是>>> asyncio.get_event_loop().run_until_complete(client.search_gifs("lol")) 无效,因为await requests.get(...)不是异步库。而是使用aiohttp这样的异步感知库。