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