1. 程式人生 > >常見的local variable 'x' referenced before assignment問題

常見的local variable 'x' referenced before assignment問題

def fun1():
    x = 5
    def fun2():
        x *= 2
        return x
    return fun2()

如上程式碼,呼叫fun1()

執行會出錯:UnboundLocalError: local variable 'x' referenced before assignment。

這是因為對於fun1函式,x是區域性變數,對於fun2函式,x是非全域性的外部變數。當在fun2中對x進行修改時,會將x視為fun2的區域性變數,遮蔽掉fun1中對x的定義;如果僅僅在fun2中對x進行讀取,則不會出現這個錯誤。

解決辦法:使用nonlocal關鍵字

def fun1():
    x = 5
    def fun2():
        nonlocal x
        x *= 2
        return x
    return fun2()

fun1()
Out[14]: 10

使用了nonlocal x後,在fun2()中就不再將x視為fun2的內部變數,fun1函式中對x的定義就不會被遮蔽掉。

相關推薦

常見local variable 'x' referenced before assignment問題

def fun1(): x = 5 def fun2(): x *= 2 return x return fun2()如上程式碼,呼叫fun1() 執行會出錯:UnboundLocalError: local vari

python使用textract解析pdf時遇到UnboundLocalError: local variable 'pipe' referenced before assignment

工作需要要用python解析各種文件,我敬愛的manager AKA Byrd推薦給了我textract。“Textract is the most ridiculous library that I've ever used before”,其實它還是挺強大的,只是對於pd

關於 local variable 'has' referenced before assignment 問題

  今天在django開發時,訪問頁面總是出現錯誤提示“local variable 'has' referenced before assignment”,查了一下資料,好像是說無法訪問這個變數,檢查一下程式碼我的檢視是這樣寫的:def MusicTable(request

全域性變數報錯:UnboundLocalError: local variable 'l' referenced before assignment

全域性變數報錯:UnboundLocalError: local variable ‘j’ referenced before assignment 最近在自學python,遇見以下問題:

UnboundLocalError: local variable 'XXX' referenced before assignment

這個問題很囧,在外面定義了一個變數 xxx ,然後在python的一個函式裡面引用這個變數,並改變它的值,結果報錯local variable 'xxx' referenced before assignment,程式碼如下: xxx = 23 def Print

全局變量報錯:UnboundLocalError: local variable 'l' referenced before assignment

使用 sign oot .net sam 單獨 規則 spa 兩個 總結: 內部函數,不修改全局變量可以訪問全局變量 內部函數,修改同名全局變量,則python會認為它是一個局部變量 在內部函數修改同名全局變量之前調用變量名稱(如print sum),則引發Unb

Python-local variable 'raw_password' referenced before assignment

str 分支 true 解決 OS 得到 __name__ -s 作用 where?   執行Python程序的時候,報這個錯 why?   變量作用域問題,在分支中定義的變量,當滿足條件的時候則可以正確得到變量,當不滿足條件的時候則報這個錯 way?   把變量從分支中抽

關於local variable 'i' referenced before assignment

如題,執行程式碼如下: def createCounter(): i = 0 def counter(): i+=1 j = i return j return counter 程式碼執行後出錯,錯誤資訊為:lo

python UnboundLocalError: local variable 'xxx' referenced before assignment

大意就是在變數定義前就引用了變數。 錯誤程式碼如下: def f(): print(n) n = 10 f() 這裡還是很清楚,很明白。 然而下面的程式碼就令人有些頭疼: n = 100 def f(): print(n) n = 10 f()

第二周:神經網絡的編程基礎----------2、編程作業常見問題與答案(Programming Assignment FAQ)

sort sign 常見問題 keep 什麽 有變 圖標 更新 無限循環 Please note that when you are working on the programming exercise you will find comments that say "#

JSP 使用<%@include%>報Duplicate local variable path 錯誤 解決方法

錯誤提示 cat not 情況 cal quest epon bsp multi 錯誤提示:Multiple annotations found at this line:- Duplicate local variable path- Duplicate local va

java9 Local-variable type inference

ont java white b- lis var span ray pac var ls = Arrays.asList("1","2"); System.out.println(ls);java9 Local-variable type inference

java Error---Lambda expression's local variable e cannot re-declare another local variable defined e

在使用lambda表示式時,為控制元件新增事件響應函式時,出現: Lambda expression's local variable e cannot re-declare another local variable defined e 出錯的程式碼段如下: stage

Eclipse快捷鍵Assign to local variable

當你new Object()寫完之後是不是又跑到行首寫Object object = ,是不是感覺既費力又2呢= = Window----Preferences----Keys----更改完之後(你也

JSP 使用報Duplicate local variable path 錯誤 解決方法

錯誤提示: Multiple annotations found at this line:  - Duplicate local variable path  - Duplicate local variable   basePath 重複變數, 因為<%@include%>引進的是程式碼,

The local variable date may not have been initialized解決辦法

這個錯誤的出現原因是我們沒有對變數輔助,也就是說如果我們隊我們所定義的變數複製之後,這個錯誤就會消失,比如 SimpleDateFormat simpleDateFormat = new Simple

FINDBUGS錯誤:Deadstore to local variable

FINDBUGS錯誤:Deadstore to local variable原因 原始碼: Map map =new HashMap(); map = UdeclareUtil.getPageList(yae258,"ap11List"); FINDBUGS錯誤:本地儲存了多

findbugs中Dead store to local variable [DLS_DEAD_LOCAL_STORE]

 List<BY102010ResultDetailModel> detailList = new ArrayList(); detailList = resultModel.getDetails(); 用findbugs執行後,說List<BY10

解決MATLAB出現"??? Undefined function or variable 'x'."的問題,一個等號引發的大戰

fin r語 true r語言 檢查 fine 沒有 tlab 改進 最近寫了一段代碼,一直彈出“??? Undefined function or variable ‘x‘.”這個錯誤。仔細檢查了一下,發現是賦值的問題。比如下面兩段代碼 h=

Cocos2d-x 常見

nbsp 實現 fun con read content 函數聲明 -a don 1)NS_CC_BEGIN cocos2d命名空間開始 2) NS_CC_END cocos2d命名空間結束 3)USING_NS_CC 聲明cocos2d命名