UnboundLocalError: local variable referenced before assignment

UnboundLocalError: local variable referenced before assignment

val = 9

def test(flag):

if flag:

val = 1

else:

print("test")

return val

if __name__ == '__main__':

ret = test(0)

print(ret)

显示UnboundLocalError: local variable 'val' referenced before assignment
但是代码改成下面这样

val = 9

def test():

return val

if __name__ == '__main__':

ret = test()

print(ret)

就不报错,但是这2者都是return val,没有区别呀,为什么?

我是参考这个地方实践的 https://www.cnblogs.com/fendo...。


回答:

val = 1 定义了一个新的变量,于是在函数中对 val 的引用就不是全局的 val 了,而是函数里那个 val 。但是,在 return 的时候并没有对它赋值,于是就出错了。

可以在函数里加一行 global val ,这样所有对 val 的引用(包括 val = 1)就都是全局的了。

python 3.3.7 文档 4.1. Naming and binding


回答:

函数内出现变量赋值if flag:val = 1,不管有没有执行到,编译器默认把变量声明为local变量,所以

if flag:  

val = 1 #local var

return val #local var

--------------

return val #global var

以上是 UnboundLocalError: local variable referenced before assignment 的全部内容, 来源链接: utcz.com/p/937771.html

回到顶部