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

为什么数据未传入createframe函数 向SQLite写入Binance数据无表生成问题

问题排查及解决方案

核心错误点(按优先级排序)

  • 语法错误直接导致程序无法启动:
    1. relevant 列表推导式未补全右方括号,且过滤逻辑冗余,正确写法为 relevant = [symbol for symbol in non_lev if symbol.endswith('USDT')]
    2. 循环条件的布尔值拼写错误,while true 需改为Python标准写法 while True(首字母大写)
    3. 事件循环变量拼写错误,lop.run_until_complete(main()) 需改为 loop.run_until_complete(main())
    4. to_sql 方法参数拼写错误,if_exist 需改为 if_exists
  • 数据推送规则错误导致收不到有效数据:
    币安WebSocket的K线订阅通道必须指定时间周期,仅写@kline无法触发推送,需补充周期参数,例如订阅1分钟K线改为 multi = [i.lower() + '@kline_1m' for i in relevant]
  • 字段取值逻辑错误导致解析失败:
    币安K线推送的核心字段存储在msg['data']['k']层级下,你当前直接从msg['data']取s、E、p字段不存在,会直接抛出KeyError中断程序,createframe函数修正为:
    def createframe(msg):
        k_data = msg['data']['k']
        df = pd.DataFrame([k_data])
        # 字段对应:s=交易对、t=K线开盘时间、c=K线收盘价,可按需调整字段
        df = df.loc[:,['s', 't', 'c']]
        df.columns = ['symbol', 'Time', 'Price']
        df.Price = df.Price.astype(float)
        df.Time = pd.to_datetime(df.Time, unit='ms')
        return df
    

通用调试建议

  1. 接收数据后先打印原始数据结构验证:在res = await tscm.recv()后添加print(res),确认能正常收到推送后再做解析逻辑
  2. 添加异常捕获避免程序意外中断,处理数据部分修改为:
    if res:
        try:
            frame = createframe(res)
            # 用iloc[0]避免pandas索引警告
            frame.to_sql(frame.symbol.iloc[0], engine, if_exists='append', index=False)
        except Exception as e:
            print(f"处理错误: {e}, 原始数据: {res}")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:45:05