运行Binance Python代码查BTCUSDT价格出现coroutine未await警告如何解决
问题产生原因
- 你使用的是
python-binancev3及以上版本的异步客户端,get_average_price属于异步协程方法,协程方法不能直接同步调用,必须通过await关键字等待执行,否则就会抛出coroutine was never awaited运行时警告,也无法正常获取返回结果。 - 你代码中调用方法时的传参
Symbol = 'BTCUSDT'参数名首字母大写,Binance接口要求的对应参数名为全小写的symbol,参数名错误即使解决异步问题也会触发接口报错。
解决方案
提供两种可行方案,可根据你的使用场景选择:
方案1:改用同步客户端(适合普通同步脚本场景,改动最小)
新版python-binance将同步客户端单独拆分到了binance.spot模块下,直接导入同步客户端调用即可:
from binance.spot import Spot import My_API # 初始化同步客户端 client = Spot(api_key=My_API.PKey, api_secret=My_API.Skey) # 注意参数名为小写symbol price = client.avg_price(symbol='BTCUSDT') print(price)
方案2:按异步规范调用异步客户端(适合异步IO场景)
如果你需要使用异步逻辑,按照Python异步语法调整代码即可:
import asyncio from binance.client import Client import My_API async def get_btc_avg_price(): async with Client(api_key=My_API.PKey, api_secret=My_API.Skey) as client: # 异步方法需要加await调用 price = await client.get_average_price(symbol='BTCUSDT') print(price) if __name__ == "__main__": asyncio.run(get_btc_avg_price())
内容的提问来源于stack exchange,提问作者Marwan
相关产品推荐
相关产品推荐

