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

使用WebSocket获取Binance数据失效,on_close函数参数错误求助

问题修复方案

核心问题解析

  • on_close回调参数不匹配:websocket库的on_close回调需要接收3个参数:ws、status_code、msg,原函数仅定义1个参数,导致调用时参数数量不匹配报错。
  • 交易对标识错误:WebSocket地址中的bitusdt是无效交易对,Binance比特币USDT交易对的正确标识为btcusdt,这是触发451握手失败的直接原因。

修正后的完整代码

import json
import pprint
import pandas as pd
import websocket

SOCKET="wss://stream.binance.com:9443/ws/btcusdt@kline_15m"

def on_open(ws):
    print("打开连接")

def on_close(ws, status_code, msg):  
    print(f"关闭连接,状态码: {status_code},信息: {msg}")

def on_message(ws, message):
    print("收到消息")
    json_message = json.loads(message)
    pprint.pprint(json_message)

    candle = json_message['k']
    is_closed = candle['x']
    if is_closed:
        close = float(candle['c'])
        high = float(candle['h'])
        low = float(candle['l'])
        vol = float(candle['v'])
        time = pd.to_datetime(candle['t'], unit='ms')
        record = {'high': high, 'low': low, 'volume': vol}  # 修正拼写错误volum→volume
        print(f"收盘价: {close}")
        print('------')

ws = websocket.WebSocketApp(SOCKET, on_open=on_open, on_close=on_close, on_message=on_message)
ws.run_forever()

额外细节优化

  • 修正变量名拼写错误:volum改为volume,避免后续使用时触发KeyError。
  • 给on_close函数添加状态码和消息打印,方便后续排查连接问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:26:00