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

Dash Plotly图表更新回调报TypeError: int类型对象无len()方法

错误触发原因

报错TypeError: object of type 'int' has no len()的直接触发点是回调函数首行的if len(selected_std_dev) == 0:判断逻辑。
dcc.RadioItems是单选组件,选中后返回的是单个标量值(你配置的可选值是1.0、2.0、3.0三个浮点数,默认值为2.0),浮点数、整数这类数值类型没有长度属性,对其调用len()方法会直接抛出类型错误。页面初始加载时回调就会接收到默认值2.0,所以首屏就会触发报错,空图表就是回调执行失败导致的。

代码中存在的其他问题

除了直接触发报错的len判断错误,你的代码还有两处会导致运行失败的问题:

  • 无效的阈值赋值逻辑:max_deviations = [(RadioItems(value) == selected_std_dev)]是完全错误的写法,你不需要实例化RadioItems组件,这里要的阈值就是回调传入的selected_std_dev参数本身,这行代码生成的是装了布尔值的单元素列表,后续做数值运算时会触发类型错误。
  • 回调无合法返回值:你贴出的代码只做了数据过滤,最终没有构造符合Plotly规范的figure对象返回,就算前面的逻辑跑通,图表也无法正常渲染。
修复方案
  1. 移除错误的len()判断,单选组件的返回值是单个数值,只需要判断是否为None即可,不需要判断长度。
  2. 删除无效的RadioItems实例化代码,直接使用传入的selected_std_dev作为标准差过滤阈值。
  3. 补全Plotly散点图的构造逻辑,在回调末尾返回合法的figure对象。

修复后的可运行参考代码:

import dash
from dash import dcc, html, Input, Output
import plotly.express as px
import pandas as pd
import numpy as np

# 替换为你自己的数据源
# df = pd.read_csv("your_dataset.csv")
app = dash.Dash(__name__)

app.layout = html.Div([
    html.Div(id='radio_output'), 
    dcc.RadioItems( 
        id='radio_dropdown', 
        options=[{'label': f'{i}倍标准差', 'value': i} for i in [1.0, 2.0, 3.0]],
        value=2.0
    ), 
    html.Div([
        dcc.Graph(id="the_graph")
    ])
])

@app.callback(
    Output("the_graph", "figure"),
    Input("radio_dropdown", 'value')
)
def update_graph(selected_std_dev):
    if selected_std_dev is None:
        return dash.no_update
    
    # 计算阈值过滤离群点
    dff = df.copy()
    y_vals = dff.CHANGE
    mean_val = np.mean(y_vals)
    std_val = np.std(y_vals)
    keep_mask = abs(y_vals - mean_val) < selected_std_dev * std_val
    dff_filtered = dff[keep_mask]

    # 构造散点图返回
    fig = px.scatter(
        dff_filtered, 
        x='TIME', 
        y='CHANGE',
        title=f'{selected_std_dev}倍标准差过滤后数据分布'
    )
    return fig

if __name__ == '__main__':
    app.run_server(debug=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:03:15