这是我的简化版 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”表达式中使用
这里出了什么问题?
看起来您在
async
函数定义之前缺少 get_counters
关键字。这导致 await
内的 get_counters
表达式抛出错误,因为它不在异步上下文中。要解决此问题,只需在 async
函数定义之前添加 get_counters
关键字即可:
@service
async def get_counters(address_id):
auth_token_b64 = await auth(brand)
你能试试这个吗?
发现自己也犯了同样的错误。从 pyscript doc 中,您可以看到
await
关键字是可选的。
由于 pyscript 是异步的,它会检测函数是真实的还是 async,并以正确的方式调用它们。所以没有必要 在 pyscript 代码中使用 async 和 wait - 它们是可选的。
从脚本中删除它解决了我的问题。