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

Plotly Dash long_callback states传参缺失位置参数报错修复

问题说明

使用Plotly Dash框架的@app.long_callback装饰器开发长回调时,代码运行触发参数缺失报错;相同入参、状态参数逻辑改用普通@app.callback装饰器编写时可正常运行。

触发报错的长回调代码:

@app.long_callback(
    outputs = Output("optimize-result", "children"),
    inputs = Input("optimize-button-id", "n_clicks"),
    states = dict(
        reorder_period = State("reorder-period-dropdown-id", "value"),
        forecast = State("forecast-dropdown-id", "value")
    ),
    running = [
        (Output("optimize-button-id", "disabled"), True, False),
    ],
    prevent_initial_call = True,
)
def load_optimize_data_button_click(number_clicks, reorder_period, forecast):

运行抛出的错误信息:

TypeError: load_optimize_data_button_click() missing 2 required positional arguments: 'reorder_period' and 'forecast'

可正常运行的普通回调参考代码:

@app.callback(
    Output("optimize-result", "children"),
    Input("optimize-button-id", "n_clicks"),
    State("reorder-period-dropdown-id", "value"),
    State("forecast-dropdown-id", "value"),
    prevent_initial_call = True,
)
def load_optimize_data_button_click(number_clicks, reorder_period, forecast):
报错原因

@app.long_callback默认不支持将states参数以字典格式传入做关键字参数映射,装饰器不会解析字典内部定义的State依赖项,这两个状态参数不会被传入回调函数,最终触发位置参数缺失报错。
长回调默认的参数传递逻辑和普通回调完全一致:inputs、states中定义的所有依赖项,会按照定义顺序依次作为位置参数传入回调函数。

修复方案

将states参数从字典格式改为按顺序排列的State对象列表即可,和普通回调的参数写法对齐。修正后的可运行代码如下:

@app.long_callback(
    output = Output("optimize-result", "children"),
    inputs = Input("optimize-button-id", "n_clicks"),
    states = [
        State("reorder-period-dropdown-id", "value"),
        State("forecast-dropdown-id", "value")
    ],
    running = [
        (Output("optimize-button-id", "disabled"), True, False),
    ],
    prevent_initial_call = True,
)
def load_optimize_data_button_click(number_clicks, reorder_period, forecast):
    # 原有业务逻辑

注:@app.long_callback的输出参数官方规范写法为单数形式output,复数形式outputs虽在部分版本可兼容运行,但不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 22:24:31