Как исправить исключение приложения Dash — Недопустимое количество выходных значений, ожидаемых 2, получено 1?

#python #plotly-dash

#python #plotly-dash

Вопрос:

Я использую plotly dash app фреймворк и имею функции обратного вызова с несколькими выходными значениями.

Когда я пытаюсь развернуть приложение, оно выдает исключение Dash. Invalid number of output values... Я пытался использовать [] и удалить их. Тем не менее, все еще замечаю исключение.

Вот как выглядит макет приложения:

 
app.layout = html.Div([

    # header
    html.Div([ 

              dcc.Link(
                 href=app.get_relative_path('/home'),
                 children='Home'
              ),

              dcc.Link(
                 href=app.get_relative_path('/history'),
                 children='History'
              ),

              # For pdf downloads
              dash_extensions.Download(id="download"),
              dcc.Location(id="url"),

              # Page content
              html.Div(id="page-content"),

              # Tab content
              html.Div(id="tab_content"),

      ])

  

Обратный вызов

 
# Update page content 

@app.callback([
               Output('page-content', 'children'),
               Output('download', 'data')
              ],
              [Input('url', 'pagename')]
             )
def display_content(page_name):

    # Pages and Links

    if not page_name:
        return [dash.no_update, dash.no_update]

    if page_name == 'history:
        return [history.layout(), dash.no_update]

    else:
        return ['404 Error', dash.no_update]

  

Обратная трассировка из журналов:

 
Traceback (most recent call last):
File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1950, in full_dispatch_request
....
_validate.validate_multi_return(output_spec, output_value, callback_id)
File "/app/.heroku/python/lib/python3.6/site-packages/dash/_validate.py", line 126, in validate_multi_return
callback_id, len(outputs_list), len(output_value)
172.17.0.19 - - [03/Sep/2020:06:03:32  0000] "POST /dash-app/_dash-update-component HTTP/1.1" 500 69 "https://example.com/dash-app" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"

dash.exceptions.InvalidCallbackReturnValue: Invalid number of output values for ..page-content.children...download.data...

Expected the output type to be a list or tuple, but got 1

  

Ответ №1:

метод display_content ожидает, что вы вернете два значения. Вместо этого вы возвращаете одно значение, список.

Поэтому вместо этого напишите:

 return history.layout(), dash.no_update
  

и

 return '404 Error', dash.no_update
  

Комментарии:

1. когда я удаляю список и возвращаю каждое значение, как вы упомянули, я получаю Expected the output type to be a list or tuple but got: None. исключение.

2. Хм … . Может быть, дочерние history.layout() возвраты должны быть списком / кортежем, но вместо этого он возвращается None ? Согласно этой ссылке , мой ответ, в принципе, должен быть правильным.

3. история. layout(), похоже, возвращает datatable, но, похоже, проблема не в этом. Я пытаюсь вернуться к обновлению вкладки и содержимого страницы. Я добавил больше контекста в вопрос.