我有一个在单独的脚本中带有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
答案 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
这样的异步感知库。