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)