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

加密交易扫描器开发中Numpy数组字符串转整数无输出问题求助

问题原因

  • 核心错误是类型转换逻辑不兼容币安返回的行情数据格式:币安K线接口返回的成交价字段(c/h/l)都是带小数位的字符串(例:"29800.45"),你先转float再用format()处理后得到的仍是带小数点的字符串,直接对这类字符串调用int()会抛出ValueError异常。你之前测试用的是纯整数字符串所以能正常运行,碰到带小数点的行情数据就会失败。
  • WebSocket回调函数默认不会主动打印异常信息,异常抛出后会直接静默中断逻辑执行,所以你看不到转换后的数组输出,甚至可能出现连接无提示断开的情况。
  • 额外优化点:用列表推导式遍历numpy数组转类型的写法效率极低,属于不必要的冗余操作。

解决方案

  1. 转换类型时先将字符串转成float,再转int,避免带小数点的字符串直接转int报错
  2. 直接用numpy内置的astype()方法做批量类型转换,性能更高写法更简洁
  3. 在回调函数中增加异常捕获逻辑,方便后续问题排查

修正后代码

import numpy as np
import websocket, json

socket = "wss://stream.binance.com:9443/ws/btcusdt@kline_1m"

closelist = []

def on_open(ws):
    print('连接已开启')
            
def on_close(ws, close_status_code, close_msg):
    print('连接已关闭')
    
def on_message(ws, message):
    global closelist
    try:
        json_message = json.loads(message)
        candle = json_message['k']
        is_candle_closed = candle['x']
        close = candle['c']
        high = candle['h']
        low = candle['l']
        
        if is_candle_closed:
            # 直接转float后存列表,不需要先format成字符串
            closelist.append(float(close))
            closelist.append(float(high))
            closelist.append(float(low))
            
            # 转numpy数组后直接转int类型
            b = np.array(closelist).astype(int)
            print(b)
            print(type(b))
            print(type(b[1]))
    except Exception as e:
        # 打印异常方便排查
        print(f"处理消息出错: {e}")

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:57:04