UnboundLocalError: local variable 'xxxx‘' referenced before assignment

错误的意思是:本地变量xxxx在引用前没有赋值

 

涉及的知识点:局部变量和全局变量

局部变量:在一个函数中使用的变量称为局部变量,不允许在函数外或另一函数使用。但该函数执行完毕,局部变量所占有的空间也被释放

#局部变量的作用域
def fun1():
    x = 5
    y = 6   #fun1()中的y和fun2()中的y互不相干
    print(x+y)  
def fun2():
    y = 1
    print(x+y)  #只有fun1()中有x,但是fun2()不能引用
fun1()
fun2()


NameError: name 'x' is not defined
#上述程序报错,由于x为fun1()函数定义的局部变量,fun1()执行完毕之后,x不复存在。

#改成下面的形式:
def fun1():
    x = 5
    y = 6   #fun1()中的y和fun2()中的y互不相干
    print(x+y)  
def fun2(x):
    y = 1
    print(x+y)  #fun2()中也有x,与fun1()中的x虽然名字相同,但此处为fun2()函数参数。两个x属于不同函数
fun1()
fun2(3)

>>>
11
4

 

全局变量:在所有函数外定义的变量为全局变量。全局变量既可以在主程序中,也可以在各函数中使用

#全局变量的作用域
x = 'outside'
y = 'global'
def f():
    x = 'inside'
    print(x)
    print(y)
f()
print(x)
print(y)



>>>
inside
global
outside
global
>>>

 

举个例子:

x = 'inside'
y = 'global'
def f():
    y = y+" var"
    print(x)
    print(y)
f()


UnboundLocalError: local variable 'y' referenced before assignment

错误原因:

由于Python语言采用的是”动态类型“技术,变量使用前不需要先声明,对变量的赋值即可自动创建变量。

上述程序中的赋值语句 y= y+"var"将在函数内部创建一个局部变量y,但在创建是等号右边的y(也是局部变量)还不存在,所以会出错。

为了防止变量在引用的过程中出错,通常全局变量使用global语句,来告知某变量为全局变量

x = "outside"
y = "global"
def f():
    global y  #声明y为全局变量
    y = y+ " var"
    print(x)
    print(y)
f()

#输出结果
>>>
outside
global var
global var
>>>

你可能感兴趣的:(UnboundLocalError: local variable 'xxxx‘' referenced before assignment)