0

Receiving callback error in browser but not terminal or jupyter notebook. I am receiving the outcome I'd like, but I'm getting the error message. I've restarted my computer and ensured no other browsers were running on port 8050 (suggestion from another stack question).

Outcome I would like: If a state is selected in "Select State" dropdown, only provide counties associated with that state in the second dropdown "Select County". All help appreciated. Thank you!

Image of Dropdown and browser error message

The dataframe has roughly 3200 rows. I've checked that all states and counties elements have data in them. I've also run the following code in jupyter notebook and didn't receive any index errors:

filtered_state = df1[df1['STATE_NAME'] == state_dropdown]
[{'label': i, 'value': i} for i in filtered_state['COUNTY'].unique()]

[k['value'] for k in county_dropdown][0]

I've tried changing 'value' in the function below to children and none.

@callback(
    Output('county_dropdown', 'value'),
    Input('county_dropdown', 'options'))
def get_county_value(county_dropdown):
    return [k['value'] for k in county_dropdown][0]

app.py

from dash import Dash, html, dash_table, dcc, callback, Output, Input
from dash import html
from dash import dcc
from dash.dependencies import Input, Output
import plotly.graph_objs as go
import pandas as pd



df1 = pd.read_csv('main.csv')

state = df1['STATE_NAME'].unique()

app = Dash(__name__, )
app.layout = html.Div([

    html.Div([
        html.Div([
            html.Div([
                html.Div([
                    html.H3('Census Data', style = {"margin-bottom": "0px", 'color': 'white'}),
                    html.H5('2023', style={"margin-top": "0px", 'color': 'white'}),

                ]),
            ], className="six column", id = "title"),

        ], id="header", className="row flex-display", style={"margin-bottom": "25px"}),

            html.Div([

                html.H3('Select State:', className='fix_label', style={'color': 'white'}),
                dcc.Dropdown(id="state_dropdown",
                             multi=False,
                             clearable=True,
                             disabled=False,
                             style={'display': True},
                             placeholder='Select State',
                             options=[{'label': c, 'value': c}
                                        for c in state], className='dcc_compon'),

                html.H3('Select County:', className='fix_label', style={'color': 'white', 'margin-left': '1%'}),
                dcc.Dropdown(id="county_dropdown",
                             multi=False,
                             clearable=True,
                             disabled=False,
                             style={'display': True},
                             placeholder='Select County',
                             options=[], className='dcc-compon'),
                ], className="create_container three columns"),

        ], className="row flex-display"),
    ], id="mainContainer", style={"display": "flex", "flex-direction": "column"})


# CREATE CALLBACK TO GET UNIQUE COUNTY NAMES
@callback(
    Output('county_dropdown', 'options'),
    Input('state_dropdown', 'value')
)
def get_county_options(state_dropdown):
    filtered_state = df1[df1['STATE_NAME'] == state_dropdown]
    return [{'label': i, 'value': i} for i in filtered_state['COUNTY'].unique()]

# CREATE CALLBACK FOR COUNTY DROPDOWN
@callback(
    Output('county_dropdown', 'value'),
    Input('county_dropdown', 'options'))
def get_county_value(county_dropdown):
    return [k['value'] for k in county_dropdown][0]


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

Data Set: main.csv

 STATE_NAME,COUNTY,POPULATION,HOUSEHOLDS,FAMILIES,SNAP
 Alabama,Autauga County,58239,21856,15321,2298
 Alabama,Baldwin County,227131,87190,58062,5839
 Alabama,Barbour County,25259,9088,5860,2331
 Alabama,Bibb County,22412,7083,5018,1198
 Alabama,Blount County,58884,21300,15213,2135
 Alabama,Bullock County,10386,3419,2077,972
 Alabama,Butler County,19181,6531,4317,1050
 Alabama,Calhoun County,116425,44295,27960,7720
 Alabama,Chambers County,34834,13123,9091,1982
 Alabama,Cherokee County,24975,9692,6430,1236
 Alabama,Chilton County,44857,16562,11814,2287
 Alabama,Choctaw County,12792,5211,3256,1077
 Alabama,Clarke County,23346,8250,5333,1653
 Alabama,Clay County,14184,5399,3721,741
 Alabama,Cleburne County,15046,5598,3755,812
 Alabama,Coffee County,53043,20478,13812,2421
 Alabama,Colbert County,56789,22640,14848,3302
 Alabama,Conecuh County,11778,4187,2498,503
 Alabama,Coosa County,10442,3824,2591,399
 Alabama,Covington County,37490,14296,9356,1764
 Alabama,Crenshaw County,13300,4653,2936,863
 Alabama,Cullman County,87129,32939,22795,3478
 Alabama,Dale County,49443,19470,12543,3529
 Alabama,Dallas County,39162,14385,8122,4045
 Alabama,DeKalb County,71554,25601,18329,4184
 Alabama,Elmore County,87146,31630,23240,3514
 Alabama,Escambia County,36879,12878,7916,1962
 Alabama,Etowah County,103468,38289,24686,5191
 Alabama,Fayette County,16365,6204,4141,1179
 Alabama,Franklin County,32034,10955,7449,2040
 Alabama,Geneva County,26604,10303,6884,1829
 Alabama,Greene County,7851,2849,1376,723
 Alabama,Hale County,14819,5133,3158,1283
 Alabama,Henry County,17165,6404,4294,929
 Alabama,Houston County,106355,41095,26907,5717
 Alabama,Jackson County,52548,20276,13951,2623
 Alabama,Jefferson County,672550,264105,162288,35046
 Alabama,Lamar County,13929,5351,3509,1038
 Alabama,Lauderdale County,93342,37928,24365,4373
 Alabama,Lawrence County,33089,12469,8791,1798
 Alabama,Lee County,172223,63122,39293,5595
 Alabama,Limestone County,101217,37987,26793,3408
 Alabama,Lowndes County,10334,3878,2367,1101
 Alabama,Macon County,19490,7136,4173,1519
 Alabama,Madison County,382149,156305,99835,14536
 Alabama,Marengo County,19397,7248,3797,1286
 Alabama,Marion County,29392,11131,7220,1626
 Alabama,Marshall County,97179,35439,24759,3820
 Alabama,Mobile County,414620,158045,102070,26083
 Alabama,Monroe County,20115,7333,4429,853
 Alabama,Montgomery County,229072,89134,54217,17165
 Alabama,Morgan County,122608,47459,31623,6243
 Alabama,Perry County,8702,2847,1515,893
 Alabama,Pickens County,19240,6993,4705,1065
 Alabama,Pike County,33176,11508,6294,1801
 Alabama,Randolph County,21984,8607,5812,1422
 Alabama,Russell County,58695,23141,14687,4514
 Alabama,St. Clair County,90412,33218,23988,3099
 Alabama,Shelby County,220780,82005,58302,3991
 Alabama,Sumter County,12482,4808,2871,1288
 Alabama,Talladega County,81850,31778,20945,5227
 Alabama,Tallapoosa County,41284,16380,10883,3092
 Alabama,Tuscaloosa County,223945,81790,52301,9014
 Alabama,Walker County,65194,24646,16466,3583
 Alabama,Washington County,15574,5261,3882,682
 Alabama,Wilcox County,10686,3626,2230,1133
 Alabama,Winston County,23650,9219,6511,1268
 Alaska,Aleutians East Borough,3409,914,568,108
 Alaska,Aleutians West Census Area,5251,1004,553,62
 Alaska,Anchorage Municipality,292545,106695,69003,9236
 Alaska,Bethel Census Area,18514,4520,3373,1796
 Alaska,Bristol Bay Borough,849,315,187,14
 Alaska,Chugach Census Area,7015,2592,1717,190
 Alaska,Copper River Census Area,2635,946,627,129
 Alaska,Denali Borough,2187,531,274,17
 Alaska,Dillingham Census Area,4899,1372,1059,399
 Alaska,Fairbanks North Star Borough,97149,35298,23400,2005
 Alaska,Haines Borough,2098,773,463,19
 Alaska,Hoonah-Angoon Census Area,2327,811,469,130
 Alaska,Juneau City and Borough,32240,12922,7414,1061
 Alaska,Kenai Peninsula Borough,58711,22768,13789,2164
 Alaska,Ketchikan Gateway Borough,13939,5487,3619,648
 Alaska,Kodiak Island Borough,13218,4416,3087,433
 Alaska,Kusilvak Census Area,8354,1815,1499,972
 Alaska,Lake and Peninsula Borough,986,319,232,96
 Alaska,Matanuska-Susitna Borough,106807,38056,27166,4054
 Alaska,Nome Census Area,10070,2714,2007,890
 Alaska,North Slope Borough,10865,2103,1561,411
 Alaska,Northwest Arctic Borough,7776,1756,1285,591
 Alaska,Petersburg Borough,3368,1211,761,97
 Alaska,Prince of Wales-Hyder Census Area,5886,2310,1445,356
 Alaska,Sitka City and Borough,8518,3439,2172,260
 Alaska,Skagway Municipality,1329,390,184,10
 Alaska,Southeast Fairbanks Census Area,6849,2127,1376,149
 Alaska,Wrangell City and Borough,2162,842,472,108
 Alaska,Yakutat City and Borough,562,216,154,10
 Alaska,Yukon-Koyukuk Census Area,5433,1899,1065,602
 Arizona,Apache County,66473,19443,12866,5585
 Arizona,Cochise County,125092,49239,30527,7209
 Arizona,Coconino County,144942,51037,30361,5194
 Arizona,Gila County,53211,22306,13770,3445
 Arizona,Graham County,38145,11577,8205,1392
 Arizona,Greenlee County,9542,3265,2262,269
 Arizona,La Paz County,16845,8678,5248,1289

1 Answer 1

0

By default callbacks are called on startup.

You've set the options attribute of county_dropdown to an empty list, but the problem is that you do this in your get_county_value callback:

return [k['value'] for k in county_dropdown][0]

Since county_dropdown is an empty list you get an IndexError.

One approach is to add prevent_initial_call=True to both callbacks. Then the get_county_value callback is only triggered after your get_county_options updates the county_dropdown options attribute.

Another other approach is to add a check to see if the list is not empty before you try to access an element from it. If the list is empty you could run raise PreventUpdate or just return another value.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.