Null не является объектом (оценивающим ‘n.layout’) в Dash Plotly

#python #dashboard #plotly-dash

#python #Информационная панель #plotly-dash

Вопрос:

Я разрабатываю панель мониторинга с использованием Dash Plotly, и я получаю сообщение об ошибке при нажатии на вкладки.

Ошибка гласит null is not an object (evaluating ‘n.layout’)

(Эта ошибка возникла из-за встроенного кода JavaScript, который запускает приложения Dash. Нажмите, чтобы увидеть полную трассировку стека или открыть консоль вашего браузера.)»

Может ли кто-нибудь помочь мне решить эту проблему?

Мой код приведен ниже.

 import dash
import dash_core_components as dcc
import dash_html_components as html
import dash_daq as daq
from dash.dependencies import Input, Output
import plotly.graph_objs as go
import pandas as pd
import numpy as np
from copy import copy
import dash_table
import json
import base64

import plotly.express as px

#Data
errors = pd.read_csv(r’/Users/kapital/Documents/ABCD/PM/errors.csv’)

external_stylesheets = [‘https://codepen.io/chriddyp/pen/bWLwgP.css’]

app = dash.Dash(name, external_stylesheets=external_stylesheets)

first_graph = dcc.Graph(id=‘graph1’,style={‘borderBottom’: ‘thin lightgrey solid’,‘padding’: ‘10px 5px’})
#, animate = True

content_tab_1 = html.Div(children = [
html.Div(first_graph, style = {‘vertical-align’:‘center’, ‘horizontal-align’:‘center’})

],
style={‘width’: ‘87%’})

app.layout = html.Div([

dcc.Tabs(id='tabs-example', value='tab-1', children=[
    dcc.Tab(label='Tab one', value='tab-1',
                                children =[content_tab_1]),
    dcc.Tab(label='Tab two', value='tab-2'),
]),
html.Div(id='tabs-example-content')
])

@app.callback(Output(‘graph1’, ‘figure’),
Input(‘tabs-example’, ‘value’))
def render_content(tab):
if tab == ‘tab-1’:

    err_count = pd.DataFrame(errors['errorID'].value_counts().reset_index().values, columns=["Error", "Count"])
    err_count = err_count.sort_index(axis = 0, ascending=True)
    fig = px.bar(err_count, x = 'Error', y = 'Count')
    return fig

    # return html.Div([
    #     html.H3('Tab content 1')
    # ])
if name == ‘main’:
app.run_server(debug=True)

 

Ответ №1:

Проблема в том, что ваша функция обратного вызова не имеет else условного оператора to. Когда пользователь выбирает вторую вкладку, этот обратный вызов не имеет альтернативного пути и возвращает None , что выдает ошибку, которую вы видите. Я сделал это, чтобы исправить это, но вы, вероятно, захотите чего-то большего:

 @app.callback(Output('graph1', 'figure'),
              Input('tabs-example', 'value'))
def render_content(tab):
    if tab == 'tab-1':
        err_count = pd.DataFrame.from_dict(dict(
            Error=[1, 2, 3, ],
            Count=[5, 6, 7])
        )
        err_count = err_count.sort_index(axis=0, ascending=True)
        fig = px.bar(err_count, x='Error', y='Count')
        return fig
    else:
        return {}