Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

UnboundLocalError: local variable 'bmi' referenced before assignment line 38

I am making a BMI calculator with plotly Dash. I’m trying to code it where the user choses the unit of the input for weight and height, however its throwing an error on line 38:

UnboundLocalError: local variable ‘bmi’ referenced before assignment

from dash import Dash, dcc, html, Input, Output

app = Dash(__name__)

app.layout = html.Div([
    html.H1("BMI Calculator"),
    html.Div([
        html.H2('Enter your weight'),
        dcc.Input(id = 'weight', value = 160, type = 'number'),
        dcc.RadioItems(options = [{'label': 'pounds', 'value': 'lbs'}, {'label': 'kilograms', 'value': 'kgs'}], 
                       value = 'lbs',
                       id = 'weight_unit'),
        html.H2('Enter your height'),
        dcc.Input(id = 'height', value = 5.83333333, type = 'number'),
        dcc.RadioItems(options = [{'label': 'feet', 'value': 'ft'},{'label': 'meters', 'value': 'm'}], 
                       value = 'ft', 
                       id = 'height_unit'),      
    ]),
    html.Br(),
    html.H1("Your estimated body mass index is:"),
    html.H1(id = 'bmi'),

])

@app.callback(
    Output(component_id = 'bmi', component_property = 'children'),
    Input(component_id  = 'weight', component_property = 'value'),
    Input(component_id  = 'weight_unit', component_property = 'value'),
    Input(component_id  = 'height', component_property = 'value'),
    Input(component_id  = 'height_unit', component_property = 'value'),
   )
    
def update_output_div(weight, weight_unit, height, height_unit):
    if weight_unit == 'lbs' and height_unit == 'ft':
        bmi = 703 * (weight/(height * 12)**2)
    if weight_unit == 'kgs' and height_unit == 'm':
        bmi = (weight)/((height)**2)
    return bmi 

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

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

Using return on a variable that was assigned within an if block means that the variable will only be assigned if that condition is met. Otherwise, when the code doesn’t run, the variable bmi does not get defined, and cannot be returned.

To resolve the problem, one way is to assign a value before the if statement.

def update_output_div(weight, weight_unit, height, height_unit):
    bmi = None
    if weight_unit == 'lbs' and height_unit == 'ft':
        bmi = 703 * (weight/(height * 12)**2)
    if weight_unit == 'kgs' and height_unit == 'm':
        bmi = (weight)/((height)**2)
    return bmi 
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading