如何正确使用pyscript中的await?

问题描述 投票:0回答:2

这是我的简化版 pyscript -

async def auth(brand):
    async with aiohttp.ClientSession() as session:
        async with session.post(url_auth) as resp:
            ...
            return auth_token_b64

@service
def get_counters(address_id):
    auth_token_b64 = await auth(brand)

    ...

我在本地使用它时效果很好

asyncio.run(get_counters(address_id=1))

但是现在我已将文件上传到 Home Assistant,但出现以下错误 -

返回auth_token_b64

类型错误:对象 str 不能在“await”表达式中使用

这里出了什么问题?

python python-3.x pyscript home-assistant
2个回答
0
投票

看起来您在

async
函数定义之前缺少
get_counters
关键字。这导致
await
内的
get_counters
表达式抛出错误,因为它不在异步上下文中。要解决此问题,只需在
async
函数定义之前添加
get_counters
关键字即可:

@service
async def get_counters(address_id):
    auth_token_b64 = await auth(brand)

你能试试这个吗?


0
投票

发现自己也犯了同样的错误。从 pyscript doc 中,您可以看到

await
关键字是可选的。

由于 pyscript 是异步的,它会检测函数是真实的还是 async,并以正确的方式调用它们。所以没有必要 在 pyscript 代码中使用 async 和 wait - 它们是可选的。

从脚本中删除它解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.