UnboundLocalError: local variable referenced before assignment
val = 9def 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 = 9def 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