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

使用Python+AWS Chalice接收TradingView webhook数据转存CSV相关问题

报错根因说明
  • ValueError: If using all scalar values, you must pass an index
    该报错来自pandas的DataFrame构造逻辑:你直接把单条JSON字典(所有值都是字符串、数字这类标量)传入pd.DataFrame()时,pandas默认将字典key识别为列名,没有行索引的情况下无法构造二维表结构,因此要求显式传入index参数。
  • TypeError: Object of type DataFrame is not JSON serializable
    该报错来自AWS Chalice的响应序列化逻辑:Chalice要求路由返回值必须是可直接JSON序列化的对象,你如果将DataFrame直接作为路由返回值,Chalice自动转JSON响应时会失败,触发该报错。
修复方案

你可以直接复用以下代码逻辑,同时解决两个报错,适配动态字段的webhook数据:

from chalice import Chalice
import pandas as pd
import os

app = Chalice(app_name='tradingview-webhook')
# 替换为你自己的本地CSV存储路径
CSV_SAVE_PATH = "D:/trading_signals/log.csv"

@app.route('/receive-signal', methods=['POST'])
def handle_signal():
    # 接收TradingView传入的动态JSON数据
    signal = app.current_request.json_body
    
    # 修复第一个报错:将单条字典套入列表后再构造DataFrame,pandas会自动生成行索引
    df = pd.DataFrame([signal])
    
    # 写入CSV逻辑:文件存在就追加写入不重复写表头,不存在就新建文件写表头
    file_exist = os.path.exists(CSV_SAVE_PATH)
    df.to_csv(
        CSV_SAVE_PATH,
        mode="a",
        header=not file_exist,
        index=False,
        encoding="utf-8-sig"
    )
    
    # 修复第二个报错:返回可JSON序列化的字典作为响应,不要返回DataFrame对象
    return {"code": 0, "msg": "signal saved"}
优化建议

如果不需要做复杂的数据处理,你可以直接用Python内置csv模块实现需求,依赖更轻量,也不会遇到pandas相关的报错:

import csv
# 上述路由中写入部分替换为以下代码即可
file_exist = os.path.exists(CSV_SAVE_PATH)
with open(CSV_SAVE_PATH, "a", newline="", encoding="utf-8-sig") as f:
    writer = csv.DictWriter(f, fieldnames=signal.keys())
    if not file_exist:
        writer.writeheader()
    writer.writerow(signal)

动态字段适配说明:如果新传入的webhook有之前没有的字段,写入时旧行对应新字段的位置会自动填充空值,不会报错;如果你需要统一所有字段的顺序,可以提前定义好全量字段列表,传入fieldnames参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:45:06