Python では、値が割り当てられる前にローカル変数が参照されると、UnboundLocalError が発生します。他のプログラミング言語とは異なり、Python では明示的な変数宣言は必要ありません。代わりに、変数は割り当てられたときに値にバインドされます。
UnboundLocalError をトリガーする 1 つの方法は、未割り当ての変数にアクセスすることです。
>>> foobar Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'foobar' is not defined
もう 1 つの方法は、代入操作の実行が失敗した場合です。条件ブロック内と同様:
def foo(): if False: spam = 'eggs' print(spam) >>> foo() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in foo UnboundLocalError: local variable 'spam' referenced before assignment
Python では、名前はさまざまな操作 (代入、関数) を通じて値にバインドされます。パラメーター、インポート ステートメント、例外ハンドラー、およびコンテキスト マネージャー。名前が関数スコープ内でバインドされている場合、その名前はローカル変数になります。関数内のグローバル変数にアクセスするには、グローバル ステートメントまたは非ローカル ステートメントを使用する必要があります (Python 3 の場合)。
たとえば、次の関数はグローバル変数 foo にアクセスしようとしますが、関数内でバインドされているため失敗します。スコープ:
foo = None def bar(): if False: foo = 'spam' print(foo) >>> bar() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in bar UnboundLocalError: local variable 'foo' referenced before assignment
ただし、グローバル foo を使用すると問題が解決されます:
foo = None def bar(): global foo if False: foo = 'spam' print(foo) >>> bar() None
の概念を理解する変数バインディングは、Python で UnboundLocalErrors を回避するために重要です。
以上がPython で UnboundLocalError が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。