UnboundLocalError:分配前已引用局部变量“ a1”

时间:2019-09-10 10:01:27

标签: python

def para(value):

    if(value==1):
        a1=10
        b1=11
        c1=12
        d1=13
    elif(value==2):
        a1=20
        b1=21
        c1=22
        d1=23
    elif(value==3):
        a1=30
        b1=31
        c1=32
        d1=33
    else:
        print("wrong input")


    dict_a=dict({'a':a1,'b':b1})
    dict_b=dict({'c':c1,'d':d1})

    return(dict_a, dict_b)

def main():
    global dict_a, dict_b

    value=input("enter the choice: \n1. 1st \n2. 2nd \n3. 3rd \n4. 4th")

    [dict_a, dict_b]=para(value)

main()

我得到的错误是:

dict_a=dict({'a':a,'b':b})
UnboundLocalError: local variable 'a1' referenced before assignment

2 个答案:

答案 0 :(得分:0)

如果代码碰到else块,则不会为a1分配值。

您可以通过以下两种方式之一来解决此问题:

分配默认值,以防在条件块中未分配默认值。

a1 = 0
b1 = 0
c1 = 0
d1 = 0
if(value==1):
    a1=10
    b1=11
    c1=12
    d1=13
elif(value==2):
    a1=20
    b1=21
    c1=22
    d1=23
elif(value==3):
    a1=30
    b1=31
    c1=32
    d1=33
else:
    print("wrong input")

或在else块中分配变量,这将基本实现相同的目的

if(value==1):
    a1=10
    b1=11
    c1=12
    d1=13
elif(value==2):
    a1=20
    b1=21
    c1=22
    d1=23
elif(value==3):
    a1=30
    b1=31
    c1=32
    d1=33
else:
    a1 = 0
    b1 = 0
    c1 = 0
    d1 = 0
    print("wrong input")

如果您不希望用户使用这些默认值,则始终可以在else中引发异常,以使用户知道他们输入了错误的值

答案 1 :(得分:0)

您应该仅在输入有效的情况下初始化字典

def para(value):
    dict_a = dict()
    dict_b = dict()
    if(value==1):
        dict_a={'a':10,'b':11}
        dict_b={'c':12,'d':13}
    elif(value==2):
        dict_a={'a':20,'b':21}
        dict_b={'c':22,'d':23}
    elif(value==3):
        dict_a={'a':30,'b':31}
        dict_b={'c':32,'d':33}
    else:
        print("wrong input")

    return(dict_a, dict_b)