Python の UnboundLocalError を理解する: 変数スコープの問題の解決
関数内の変数に値を割り当てるとき、変数がアクセスされると Python は UnboundLocalError を発生させる可能性があります関数内でローカルに定義される前に。このエラーの背後にある理由を詳しく調べ、解決策を検討してみましょう。
このエラーにつながる一般的なシナリオの 1 つは、変数が関数内の代入ステートメントで宣言され、同じ名前のグローバル変数を効果的にシャドウしている場合です。次のコード スニペットを考えてみましょう:
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()
この例では、関数はグローバル スコープですでに宣言されている変数 Var1 を使用しようとしています。ただし、関数内の行 Var1 -= 1 は、ローカル変数 Var1 に新しい値を代入し、グローバル変数を覆い隠します。 Python でこれが発生すると、UnboundLocalError が発生します。
エラーの解決
この問題を解決する 1 つの方法は、関数内で Python のグローバル キーワードを使用することです。このキーワードは、関数内で参照される変数が個別のローカル変数ではなくグローバル変数であることを Python に明示的に通知します。
def function(): global Var1, Var2 # Declare global variables inside 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
global キーワードを使用すると、関数はグローバル変数 Var1 と Var2 にアクセスして変更できます。 .
考慮事項:
グローバル変数の使用は魅力的かもしれませんが、コードの保守とデバッグが困難になる可能性があるため、Python では通常は推奨されません。代わりに、変数を引数として関数に渡すか、必要に応じてクラス変数を利用することをお勧めします。
以上がPython で UnboundLocalError が発生するのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。