本文介绍如何处理报错–UnboundLocalError: local variable ‘x’ referenced before assignment
源代码:
def fun1():
x = 2
def fun2():
# nonlocal x
x *= x
return x
return fun2()
print(fun1())
运行报错如下:
UnboundLocalError: local variable 'x' referenced before assignment
这里报错由于 闭包 产生的,Python认为内部函数的x是局部变量,外部函数的x被屏蔽了,因此内部x变量找不到值,导致报错。
下面有两种处理办法:
第一种方法,将x初始成一个list,再利用索引赋值
代码如下:
def fun1():
x = [2]
def fun2():
# nonlocal x[0]
x[0] *= x[0]
return x[0]
return fun2()
print(fun1())
第二种方法,Python有个关键词:nonlocal,可以将外部函数的x值引用到内部函数
代码如下:
def fun1():
x = 2
def fun2():
nonlocal x
x *= x
return x
return fun2()
print(fun1())
两种方法运行结果如下:
C:\Python37\python.exe "D:/Program Files/PycharmProjects/pycharmPrj/zzz/Python/lx0.py"
4
Process finished with exit code 0