Python UnboundLocalError:赋值前引用了局部变量“a1”

Python UnboundLocalError:赋值前引用了局部变量“a1”,python,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=

我得到的错误是:

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()

如果代码命中else块,a1将不会被赋值

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

如果在条件块中未指定默认值,请指定默认值

dict_a=dict({'a':a,'b':b})
UnboundLocalError: local variable 'a1' referenced before assignment
或者在else块中分配变量,这将实现基本相同的功能

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")

value是一个字符串,不是int,所以它不等于1、2或3,所以a1永远不会被赋值。如果它命中else,则不会生成任何变量,而dict_a和dict_b使用a1和b1。也可以尝试在else中创建变量,或者提出一些东西来阻止进一步的操作。另外,请参阅:ifstatement不需要parantises,因为它不是函数调用。将ifvalue==1:更改为if value==1:。Ansd请去掉全局参数。@khelwood我将输入设为int,结果出现以下类型错误:int接受0个位置参数,但给出了1个位置参数
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)