2017-07-26 14 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

スコープ内の変数への代入を行うとき、これは、 は、変数はそのスコープにローカルになり、外側に任意の同様 という名前の変数をシャドウしていることので範囲。

ここに完全な読み:LENがコメントされている場合Why am I getting an UnboundLocalError when the variable has a value?

それはちょうどヘッドアップ機能でビルドとして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がローカル変数として解析されます。プログラミングのよくある質問で答えがあり

関連する問題