次のコードではエラーが発生しますUnboundLocalError: local variable 'Var1' referenced before assignment
:
Var1 = 1
Var2 = 0
def function():
if Var2 == 0 and Var1 > 0:
print("Result 1")
elif Var2 == 1 and Var1 > 0:
print("Result 2")
elif Var1 < 1:
print("Result 3")
Var1 -= 1
function()
これをどうすれば修正できますか?
ベストアンサー1
これは、が存在するにもかかわらず、関数内の名前 (一番下の行)Var1
に代入ステートメントも使用しているためです。当然、これにより、関数のスコープ内に (または) と呼ばれる変数が作成されます(実際には、またはは既存の変数を更新 (再割り当て) するだけですが、理由は不明 (このコンテキストでは一貫性がある可能性が高い) ですが、Python はそれを代入として扱います)。Python インタープリターは、モジュールのロード時にこれを認識し、グローバル スコープをローカル スコープ内で使用すべきではないと (正しく) 決定します。これにより、変数がローカルに割り当てられる前に参照しようとすると問題が発生します。Var1
Var1 -= 1
Var1
-=
+=
Var1
必要のない場合、グローバル変数を使用することは、混乱を招き、問題のあるコードにつながるため、Python 開発者には通常好まれません。ただし、コードが意味することを実現するためにグローバル変数を使用したい場合は、関数の先頭に以下を追加するだけです。
global Var1, Var2
これにより、関数のローカル スコープ内でまたは変数を定義する意図がないことが Python に通知されます。Python インタープリターはモジュールのロード時にこれを認識し、前述の変数への参照をグローバル スコープで検索することを決定します (これは正しい判断です)。Var1
Var2