Python のドキュメントでは、ローカル変数に変数が割り当てられる前にアクセスすると UnboundLocalError が発生すると説明されています。価値。ただし、Python は宣言を強制しないと述べています。ここで疑問が生じます: 変数が宣言されていない場合、どのようにして「バインドされていない」状態にできるのでしょうか?
Python では、変数のバインドは代入、ループ、関数、インポートを通じて行われます。 、例外処理、およびコンテキスト管理。バインディングは変数のスコープを決定します。名前が関数またはメソッド内でバインドされている場合、適切なステートメントを使用してグローバルまたは非ローカルとして明示的にマークされていない限り、その名前はローカルとみなされます。
アンバインド名とは、次のものを指します。バインドされる前に参照された変数。これは、まだ作成または割り当てられていない未定義の名前とは異なります。バインドされていない名前が見つかると、Python は UnboundLocalError を発生させます。
次のコードを考えてみましょう。
def foo(): if False: spam = 'eggs' print(spam)
foo() を実行すると UnboundLocalError が発生します。 。 spam 変数は、値が割り当てられることなく print(spam) で参照されます。 if ステートメント内で定義されていても、ステートメントは実行されないため、スパムはアンバインドされたままになります。
UnboundLocalError を防止するには、ローカル変数を参照する前に、ローカル変数に値が割り当てられていることを確認してください。 。あるいは、global ステートメントを使用してグローバル変数を明示的に宣言するか、nonlocal ステートメントを使用して非ローカル変数を明示的に宣言します。
要約すると、名前は、現在のスコープ内でバインドされる前に参照されるとバインドされなくなります。これは、Python では変数宣言が必要ないため、コード ブロック内のどこでもバインド操作を実行できるために発生します。適切な割り当てとスコープ管理を使用すると、UnboundLocalError 例外を回避できます。
以上がPython で UnboundLocalError はいつ、どのように発生しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。