AAX交易所WebSocket获取BTC标记价:跳过初始消息提取指定字段
解决AAX WebSocket标记价提取的KeyError问题
核心思路很简单:处理每条WebSocket消息时,先检查目标字段p是否存在,只处理包含该字段的消息,直接跳过不含p的初始消息即可,不用刻意去数“前两条”(毕竟不同场景下初始消息数量可能变化)。
示例代码(Python)
假设你用的是websocket库,修改消息处理逻辑如下:
import websocket import json def on_message(ws, message): data = json.loads(message) # 先判断字段是否存在,再提取数据 if 'p' in data: mark_price = data['p'] # 这里可以将mark_price存入全局变量、队列或直接用于后续业务逻辑 print(f"BTCUSDTFP标记价: {mark_price}") # 不含'p'的消息直接跳过,不做任何处理 def on_error(ws, error): print(error) def on_close(ws): print("连接关闭") def on_open(ws): # 发送订阅标记价的请求(需符合AAX官方WebSocket协议格式) subscribe_cmd = json.dumps({ "op": "subscribe", "args": ["markPrice@BTCUSDTFP"] }) ws.send(subscribe_cmd) if __name__ == "__main__": ws = websocket.WebSocketApp("wss://stream.aax.com/ws", on_open=on_open, on_message=on_message, on_error=on_error, on_close=on_close) ws.run_forever()
关键说明
- 核心判断逻辑
if 'p' in data能从根源上避免KeyError,不管初始消息有多少条,只要不含目标字段就直接跳过。 - 如果用其他语言(比如JavaScript),逻辑完全一致:解析消息后先做字段存在性校验,再取值。比如JS里可以用
if ('p' in data)或if (data.p !== undefined)。
内容的提问来源于stack exchange,提问作者user19912573
相关产品推荐
相关产品推荐

