Python中的UnboundLocalError: variable referenced before assignment錯誤分析與解決

思維之上發表於2017-08-10

無論python2還是python3中都會出現UnboundLocalError,這個錯誤由“variable xxx referenced before assignment”得知是由於變數還沒有賦值初始化就被引用造成的,如本人在scrapy 中遇到的問題:

yield scrapy.Request(next_url,callback=self.parse)

執行就會報“local variable next_url referenced before assignment”,當然其實我是有初始化的,不過由於程式bug,直接跳過了初始化。

另外值得注意的是,這種情況更多出現的場景是全域性變數和區域性變數傻傻分不清的情況,在python2和python3中的函式使用變數時都沒有預設使用全域性變數,所以如果不將變數宣告為全域性變數的話,就會造成UnboundLocalError錯誤。如:

count=0

def increment():
    count=count+1

increment()

由於在increment中沒有說明count是全域性變數,所以預設為區域性變數,然而count作為區域性變數是沒有初始化的,正確的用法如下:

count=0

def increment():
    global count
    count=count+1

increment()

這樣就不存在“local variable referenced before assignment”(區域性變數被賦值前即被引用),因為不存在區域性變數了,當然如果函式中使用的是區域性變數,第一步也是要初始化,這裡不再贅言

相關文章