入れ子関数スコープでの UnboundLocalError の解決
入れ子関数内の非バインド ローカル変数にアクセスするときに、Python インタープリターで UnboundLocalError が発生します。この問題は、ネストされた関数が外部関数内で宣言された変数を変更しようとすると発生します。
例:
次のコードを考えてみましょう:
<code class="python">def outer(): ctr = 0 def inner(): ctr += 1 inner()</code>
このコードを実行すると、インタープリタは次のエラーを生成します:
Traceback (most recent call last): File "foo.py", line 9, in <module> outer() File "foo.py", line 7, in outer inner() File "foo.py", line 5, in inner ctr += 1 UnboundLocalError: local variable 'ctr' referenced before assignment
原因:
ネストされたスコープがあるにもかかわらず、内部関数は 'ctr にアクセスできません' 外部関数で定義されているため、変数を直接使用できます。これにより、バインドされていない変数が発生し、UnboundLocalError がトリガーされます。
解決策:
Python 3 では、ネストされたスコープで変数の再バインドを可能にする 'nonlocal' ステートメントが提供されます。コードを変更して「非ローカル」を含めると問題が解決します:
<code class="python">def outer(): ctr = 0 def inner(): nonlocal ctr ctr += 1 inner()</code>
Python 2 ユーザーの場合は、別のアプローチが必要です:
以上が入れ子関数のスコープでバインドされていないローカル変数エラーを処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。