繁体   English   中英

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

[英]await raises SyntaxError when the function called has the async keyword: 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_gifsClient类中的一个函数)

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

await仅在async def内有效,因此它不适用于顶层。 这是因为await合同是它必须能够挂起当前的协程,并且在顶层没有要暂停的协程。

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

>>> asyncio.get_event_loop().run_until_complete(client.search_gifs("lol"))

您的代码的另一个问题是,由于requests不是异步库,所以await requests.get(...)将无法工作。 相反,请使用诸如aiohttp这样的异步感知库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM