使用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
相关产品推荐
相关产品推荐

