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

VSCode中websocket-client的on_open与on_message函数无法识别WebSocket对象,Binance WebSocket数据获取失败求助

问题:VSCode中运行Binance WebSocket代码无输出,Colab正常工作

我在从Binance WebSocket获取数据时遇到了一个奇怪的问题:相同的代码在Google Colab里能正常打印数据,但在VSCode中运行时屏幕没有任何输出,而且感觉on_open和on_message里的ws对象好像没被识别。我的代码如下:

import websocket
cc = "btcusdt"
interval = "1m"
socket = f"wss://stream.binance.com:9443/ws/{cc}@kline_{interval}"
#print(socket)
def on_message(ws, message):
    print(message)
def on_close(ws):
    print("### closed ###")
ws = websocket.WebSocketApp(socket,on_message=on_message, on_close=on_close)
ws.run_forever()

可能的原因及解决方案

我之前碰到过类似的情况,大概率是下面几个因素导致的,咱们一步步排查:

1. Python环境依赖问题(最常见)

Colab默认预装了websocket-client包,但你的VSCode本地Python环境可能没装这个包,或者装了错误的包(注意:不是websocket包,而是websocket-client——这是两个不同的库,代码里用的websocket.WebSocketApp属于前者)。

解决步骤:

  • 打开VSCode的终端,运行命令安装/升级依赖:
    pip install websocket-client
    # 如果已经安装,尝试升级到最新版本
    pip install --upgrade websocket-client
    
  • 确认VSCode使用的Python环境是你安装了依赖的那个:点击VSCode右下角的Python版本号,通过Python: Select Interpreter切换到正确的环境。

2. 输出缓冲导致内容没实时显示

VSCode的终端有时候会启用输出缓冲,导致print的内容不会立刻显示出来,尤其是在长时间运行的程序里。

解决步骤:
修改print语句,加上flush=True参数强制刷新输出:

def on_message(ws, message):
    print(message, flush=True)

def on_close(ws):
    print("### closed ###", flush=True)

3. 缺少连接状态回调,无法排查连接问题

你的代码没有定义on_open和on_error回调,没法知道WebSocket是否成功建立连接,或者有没有发生错误。

解决步骤:
补充这两个回调函数,帮你定位问题:

def on_open(ws):
    print("WebSocket连接已成功建立!", flush=True)

def on_error(ws, error):
    print(f"连接发生错误: {error}", flush=True)

# 初始化WebSocketApp时加上这两个回调
ws = websocket.WebSocketApp(
    socket,
    on_message=on_message,
    on_close=on_close,
    on_open=on_open,
    on_error=on_error
)

如果运行后看到on_error的输出,就能直接知道是网络错误还是其他问题;如果看到on_open的输出,说明连接正常,那问题可能出在输出缓冲或者后续的数据处理上。

4. 网络/代理拦截问题

VSCode所在的机器可能有防火墙、代理软件(比如VPN、浏览器代理)拦截了WebSocket连接,而Colab的云端环境没有这个限制。

解决步骤:

  • 暂时关闭代理软件、防火墙,或者切换到手机热点测试。
  • 用浏览器的开发者工具测试WebSocket连接:打开浏览器,按F12进入开发者工具→网络→筛选"WS",然后访问wss://stream.binance.com:9443/ws/btcusdt@kline_1m,看是否能成功建立连接并收到数据。

修改后的完整代码

把上面的优化点整合起来,完整代码如下:

import websocket

cc = "btcusdt"
interval = "1m"
socket = f"wss://stream.binance.com:9443/ws/{cc}@kline_{interval}"

def on_open(ws):
    print("WebSocket连接已成功建立!", flush=True)

def on_message(ws, message):
    print(message, flush=True)

def on_close(ws):
    print("### closed ###", flush=True)

def on_error(ws, error):
    print(f"连接发生错误: {error}", flush=True)

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

按照上面的步骤排查,应该能解决VSCode里无输出的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:27:38