SyntaxError: 'await' 外部函数

Nam*_*cus 6 python python-3.x darksky

您好,我是 Python 新手,正在尝试使用 Detrous 制作的 Dark Sky Python API。当我运行演示代码时,出现错误:

forecast = await darksky.get_forecast(
              ^
SyntaxError: 'await' outside function
Run Code Online (Sandbox Code Playgroud)

此错误源于:

forecast = await darksky.get_forecast(
    latitude, longitude,
    extend=False, # default `False`
    lang=languages.ENGLISH, # default `ENGLISH`
    units=units.AUTO, # default `auto`
    exclude=[weather.MINUTELY, weather.ALERTS] # default `[]`
)
Run Code Online (Sandbox Code Playgroud)

我不太确定如何解决这个问题,我正在使用 python 3。

谢谢

小智 7

我认为这个答案对与我搜索相同问题的人很有用。要在同步上下文中使用异步函数,您可以使用事件循环。出于教育目的,您可以从头开始编写它。您可以从这个答案开始 /sf/answers/3578183731/ 并继续阅读 David Beazley 的书籍。

但是 asyncio 的开发人员已经为您做到了。

import asyncio

loop = asyncio.get_event_loop()
forecast = loop.run_until_complete(darksky.get_forecast(...<here place arguments>...))
loop.close()
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用 Python 3,7 或更高版本,则可以简化为 `asyncio.run(darksky.get_forecast(...))` (3认同)

小智 2

await关键字只能在异步函数和方法中使用。您可以阅读有关异步代码的更多内容以了解原因。

解决方案是使用而darksky = DarkSky(API_KEY)不是使用darksky = DarkSkyAsync(API_KEY).