Python UnboundLocalError: local variable 'xxx' referenced before assignment 解决方法


一、报错含义:

val=9
def test(): print(val) val = 6
    print(val) test()

翻译:本地变量xxx引用前没有定义。

 

二、报错原因

这是Python变量作用域的问题的问题导致的:

  1. 内部函数,不修改全局变量可以访问全局变量
  2. 内部函数,修改同名全局变量,则python会认为它是一个局部变量
  3. 在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError
val=9  #val现在是全局变量
def test(): print(val) #引用局部变量,但局部变量未在函数内定义,报局部变量未定义的error val = 6  #函数内,修改了同名全局变量,则变量val会被认为是局部变量,所以在上一句“print(val)”引用该变量时,被认为是局部变量的val,又没有在引用前定义,所以Unbound-LocalError
    print(val) test()

 

三、解决方法

如果想在函数里修改同名全局变量的值之前引用该变量,就需要在函数内引用前用global关键字将被认为是局部的变量定义为全局变量。如下:

val=9
def test(): global val #将局部变量再次定义为全局变量 print(val) #可以直接引用全局变量 val = 6  #修改了同名全局变量,变量val会被认为是局部变量,但是在“print(val)”引用该变量之前,将变量又再次定义为全局变量,所以可能正确被引用,且修改的是全局同一个变量
    print(val) test() print(val) #全局变量已在函数内被修改

打印结果:

9
6
6

 

如果只是想在函数内使用同名变量,而不改变函数外全局变量的值,则直接在函数内引用该变量前,初始化即可。如下:

val=9
def test(): val = 0 #定义局部变量val
    print(val) #引用局部变量
    val = 6  #修改局部变量,不会影响到全局变量的值
    print(val) #引用局部变量 test() print(val) #引用全局变量,不受函数内的局部变量影响

打印结果:

0 6
9

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM