89

Pythonでは、次のエラーが発生します。

UnboundLocalError: local variable 'total' referenced before assignment

ファイルの先頭(エラーが発生する関数の前)で、キーワードtotalを使用して宣言します。global次に、プログラムの本体で、を使用する関数totalが呼び出される前に、0に割り当てます。さまざまな場所(宣言された直後のファイルの先頭を含む)で0に設定しようとしましたが、動作させることができません。

誰かが私が間違っていることを見ていますか?

4

4 に答える 4

180

'global'を誤って使用していると思います。Pythonリファレンスを参照してください。グローバルなしで変数を宣言してから、グローバル変数にアクセスする場合は関数内で宣言する必要がありますglobal yourvar

#!/usr/bin/python

total

def checkTotal():
    global total
    total = 0

この例を参照してください。

#!/usr/bin/env python

total = 0

def doA():
    # not accessing global total
    total = 10

def doB():
    global total
    total = total + 1

def checkTotal():
    # global total - not required as global is required
    # only for assignment - thanks for comment Greg
    print total

def main():
    doA()
    doB()
    checkTotal()

if __name__ == '__main__':
    main()

グローバル合計doA()を変更しないため、出力は11ではなく1になります。

于 2009-05-13T00:24:28.873 に答える
6

私のシナリオ

def example():
    cl = [0, 1]
    def inner():
        #cl = [1, 2] # access this way will throw `reference before assignment`
        cl[0] = 1 
        cl[1] = 2   # these won't

    inner()
于 2017-02-03T06:00:55.087 に答える
0
def inside():
   global var
   var = 'info'
inside()
print(var)

>>>'info'

問題は終了しました

于 2020-10-01T13:38:59.720 に答える
0

関数スコープに対してこのようにできることを述べたいと思います

def main()

  self.x = 0

  def increment():
    self.x += 1
  
  for i in range(5):
     increment()
  
  print(self.x)
于 2021-10-26T22:18:06.900 に答える