2017-07-26 72 views
1

例如:`UnboundLocalError`報告錯誤行號

$ cat -n foo.py 
    1 def f(): 
    2  str = len 
    3  str = str('abc') 
    4 # len = len('abc') 
    5 f() 
$ python2.7 foo.py 
$ 

它成功地運行,因此與線#2和行#3沒有問題。但經過我去掉線#4:

$ cat -n bar.py 
    1 def f(): 
    2  str = len 
    3  str = str('abc') 
    4  len = len('abc') 
    5 f() 
$ python2.7 bar.py 
Traceback (most recent call last): 
    File "bar.py", line 5, in <module> 
    f() 
    File "bar.py", line 2, in f 
    str = len 
UnboundLocalError: local variable 'len' referenced before assignment 
$ 

現在報告錯誤所以必須有一些錯誤的註釋掉線#4,但爲什麼報道上線#2回溯錯誤?

+0

只是擡頭:你最近回答的問題的作者[有問](https://meta.stackoverflow.com/questions/355936/an-answer-and-comments-just-disappear)爲什麼你刪除了你的答案,以防你想稱重。 –

回答

2

有在規劃常見問題解答一個答案

這是因爲當您在一個範圍內的賦值給一個變量, 該變量變成局部的範圍和陰影任何類似 命名變量外範圍。

在這裏閱讀完整:Why am I getting an UnboundLocalError when the variable has a value?

當LEN評論它認爲是一個構建在功能len()

def f(): 
    str = len 
    print type(str) 
    str = str('abc') 
    # len = len('abc') 
    print type(len) 

f() 

<type 'builtin_function_or_method'> 
<type 'builtin_function_or_method'> 
0

與L4評論,len被解析爲函數len()

取消註釋L4後,len被解析爲局部變量。