ホームページ >バックエンド開発 >Python チュートリアル >Python で UnboundLocalError が発生するのはなぜですか?

Python で UnboundLocalError が発生するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-24 13:08:16655ブラウズ

Why Does Python Raise an UnboundLocalError?

Python のアンバインド名: UnboundLocalError について

Python で名前に遭遇すると、インタープリターは現在のスコープ内でのバインド ステータスを確認します。名前が値にバインドされていない場合は、エラーが発生します。このようなエラーを回避するには、名前バインドの仕組みを理解することが重要です。

バインドされていないローカル名の性質

ローカル変数が割り当てられる前に参照されると、UnboundLocalError が発生します。値、またはバインディング操作 (代入、関数パラメーターなど) が発生する前。この状況は、条件ステートメントによってバインド操作の実行が妨げられている場合に発生する可能性があります。

次のコード スニペットを考えてみましょう。

def foo():
    if False:
        spam = 'eggs'
    print(spam)

この例では、変数 spam は if 内でバインドされていません。条件が False と評価されるため、ステートメントのブロックになります。インタプリタが print ステートメントに遭遇すると、スパムのバインドされた値を見つけることができないため、UnboundLocalError が送出されます。

バインディング操作

Python では、バインディング操作によりスコープが確立されます。名前の。これらの操作には次のものが含まれます。

  • 代入
  • 関数パラメータ
  • ループ名
  • 例外ハンドラ
  • コンテキストマネージャ名

グローバルとローカルバインディング

ローカル名は、特定のスコープ (通常は関数またはネストされたブロック) 内にバインドされます。一方、グローバル名は関数スコープの外側にバインドされており、プログラム内のどこからでもアクセスできます。変数をグローバルとして明示的に宣言するには、関数スコープ内で global キーワードを使用する必要があります。

たとえば、次のコード スニペットを考えてみましょう。

foo = None
def bar():
    foo = 'spam'
    print(foo)

このコードでは、foo のため UnboundLocalError が発生します。 bar 関数のスコープ内でバインドされています。これを修正するには、関数内で foo をグローバル変数として宣言する必要があります。

foo = None
def bar():
    global foo
    foo = 'spam'
    print(foo)

要約

ローカル変数がバインドされる前に参照されると、UnboundLocalErrors が発生します。値に。これらのエラーを回避するには、バインド操作とグローバル名とローカル名の概念を理解することが不可欠です。名前のバインディングを適切に管理することで、Python プログラマは、バインドされていない名前に関連するエラーを発生させずにコードを実行できるようになります。

以上がPython で UnboundLocalError が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。