1. ホーム
  2. python

[解決済み] 関数内でグローバル変数に代入すると、"referred before assignment "というエラーが発生するのはなぜですか?

2023-03-27 13:21:27

質問

Pythonで、以下のようなエラーが発生します。

UnboundLocalError: local variable 'total' referenced before assignment

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

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

どのように解決するのですか?

グローバル」の使い方が間違っているのではないでしょうか。参照 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 になります。