3

このコードはエラーを出します:UnboundLocalError: local variable 'LINES' referenced before assignmentしかしLINES、印刷ステートメントの下の行をコメントアウトすると、エラーがスローされず len(lines) = 0、期待どおりに印刷されるため、明らかに初期化されます。Pythonについて何か理解していませんか?? 何が起きてる?

LINES = []

def foo():
  for prob in range(1,3):
    print "len(lines) = %d" % len(LINES)
    LINES = []

if __name__ == "__main__":
  foo()
4

4 に答える 4

5

You need to use the global keyword:

def foo():
  global LINES
  for prob in range(1,3):
    print "len(lines) = %d" % len(LINES)
    LINES = []

Otherwise, Python will think that LINES is local, and printing out the value before setting it to [] will be an issue

You can get the value of global variable LINES by printing it out, but when you have the statement

LINES = []

which tries to set LINES to a new list, Python interprets it as a local variable

于 2013-07-15T00:07:49.713 に答える
1

希望するログインが言ったように、

サンプル関数で LINES に割り当てるため、Python はグローバル変数を使用しないことを認識していますが、定義する前にこの変数にアクセスしようとします。

これで終わりではありません。グローバル キーワードを使用してこれを修正し、PythonLINESに関数内が関数外と同じであることを伝えLINESます。

試す:

LINES = []

def foo():
  global lines
  for prob in range(1,3):
    print "len(lines) = %d" % len(LINES)
    LINES = []

if __name__ == "__main__":
  foo()
于 2013-07-15T00:27:02.027 に答える