You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用第三方API模块时遇asyncio TypeError:dict不可用于await表达式

解决异步调用同步API时的TypeError问题

嘿,我来帮你搞定这个报错!你遇到的TypeError: object dict can't be used in 'await' expression,核心原因很简单:await只能用于可等待对象(比如协程、Future、Task),而你调用的thirdPartyAPIwrapper.data()直接返回了一个字典(dict),它不是可等待对象,所以不能用await修饰。

再加上你代码里还有几个小拼写错误,我一起帮你修正并给出完整的解决方案:

第一步:修正代码里的低级错误

你的代码里有两处拼写问题:

  • asncio → 正确拼写是asyncio
  • retrienveData 和 retrieveData 拼写不一致,要统一变量名

第二步:包装同步API为异步调用

因为第三方的data()是同步函数,直接在异步函数里调用会阻塞整个事件循环(这也是你之前应用卡顿的原因),我们可以用asyncio.run_in_executor()把同步调用放到线程池中执行,这样既不会阻塞事件循环,又能通过await等待结果返回。

修正后的完整代码

import asyncio
import thirdPartyAPIwrapper

async def getData():
    # 获取当前事件循环
    loop = asyncio.get_event_loop()
    # 把同步API调用放到线程池执行,返回可等待的Future对象
    retrieveData = await loop.run_in_executor(None, thirdPartyAPIwrapper.data)
    return retrieveData

def main():
    # Python 3.7+推荐用asyncio.run()来运行异步函数
    result = asyncio.run(getData())
    print(result)

if __name__ == "__main__":
    main()

为什么这样能解决问题?

  1. run_in_executor()会把同步的thirdPartyAPIwrapper.data()调用放到单独的线程中执行,不会阻塞异步事件循环,彻底解决应用卡顿的问题;
  2. 它返回的是一个Future对象(可等待对象),所以可以用await来等待结果,自然就不会再触发TypeError了。

额外提示

如果这个第三方模块本身提供了异步版本的API(比如async_data()之类的),那优先使用官方的异步API,这样效率会更高;如果没有的话,上面的线程池包装方案就是最优解啦。

内容的提问来源于stack exchange,提问作者Riley Hughes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:36:15