Python调用Binance接口get_account()出现coroutine对象不可下标错误
问题原因与修复方案
触发原因
- 你所使用的客户端SDK近期完成了版本迭代升级,原本的同步方法
get_account被调整为异步协程方法。 - 协程对象未经过
await执行时,仅为协程类的实例,并非接口实际返回的字典数据,所以直接按下标取值会触发TypeError;同时解释器检测到协程未被执行,就会抛出对应的运行时警告。
修复方案
你可以根据自己的使用场景二选一:
方案1:沿用同步写法
如果不需要使用异步特性,有两种操作可选:
- 回滚客户端SDK到之前支持同步
get_account方法的旧版本 - 替换当前初始化的异步客户端为该SDK提供的同步客户端实例,大部分同类型SDK都会分别提供同步
Client和异步AsyncClient两个初始化类,切换为同步类初始化后原有代码即可正常运行。
方案2:适配异步逻辑
如果需要保留新版本的异步特性,按异步语法规则调整代码即可:
import asyncio # 初始化异步客户端(注意要使用对应SDK的异步类,比如AsyncClient) # client = AsyncClient(api_key="你的key", api_secret="你的密钥") async def get_balance(): info = await client.get_account() print("ACCOUNT BALANCE INFO") bal = info['balances'] print("BALANCE:") for b in bal: if float(b['free']) > 0: print(b) if __name__ == "__main__": asyncio.run(get_balance())
内容的提问来源于stack exchange,提问作者Major Capital
相关产品推荐
相关产品推荐

