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

Python使用python-binance的BinanceSocketManager报错及代码不可达问题求助

问题原因
  • 第一个错误TypeError: As of 3.10, the *loop* parameter was removed from Queue()是当前安装的python-binance版本过低,旧版本内置逻辑仍向asyncio.Queue传递已废弃的loop参数,和Python3.10+版本不兼容。
  • 第二个await client.close_connection()代码不可达、会话未关闭问题,是因为while True是无限循环,除非被强制中断,否则永远不会执行循环后的关闭逻辑,程序异常退出时就会抛出会话未关闭的警告。
修复步骤
  1. 先升级python-binance到最新适配Python3.10+的版本:
pip install --upgrade python-binance
  1. 修改代码逻辑,增加异常捕获逻辑,将客户端关闭操作放到finally块中,保证程序退出时一定会执行关闭逻辑,同时替换已废弃的asyncio事件循环写法:
import asyncio
from binance import AsyncClient, BinanceSocketManager
from setting import API_KEY, SECRET_KEY


async def main():
    client = await AsyncClient.create(API_KEY, SECRET_KEY)
    bm = BinanceSocketManager(client)
    # 启动BNBBTC交易对socket
    ts = bm.trade_socket('BNBBTC')
    
    try:
        async with ts as tscm:
            while True:
                res = await tscm.recv()
                print(res)
    except KeyboardInterrupt:
        # 捕获手动中断信号
        print("手动停止数据接收")
    finally:
        # 无论是否异常都会执行关闭操作,解决会话未关闭问题
        await client.close_connection()

if __name__ == "__main__":
    # Python3.7+推荐使用asyncio.run,自动管理事件循环
    asyncio.run(main())
验证说明

修改后运行代码即可正常接收币安WebSocket推送的交易数据,按Ctrl+C手动停止时会正常关闭客户端连接,不会再抛出未关闭会话的警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:45:03