概要:最初の使用後にローカル変数が再割り当てされたときにUnboundLocalError を解決するには、globalキーワードまたはnonlocalキーワードのいずれかを使用できます。 globalキーワードを使用すると、関数のローカルスコープ内からグローバル変数の値を変更できますが、nonlocalキーワードは入れ子関数の場合と同様の機能を提供します。

問題:ローカル変数を指定します。 最初の使用後にローカル変数が再割り当てされたときにUnboundLocalError を解決するにはどうすればよいですか?

:

val = 100def func(): val = val + 100 print(val)func()

出力:

Traceback (most recent call last): File "C:/Users/Shubham-PC/PycharmProjects/pythonProject1/main.py", line 9, in <module> func() File "C:/Users/Shubham-PC/PycharmProjects/pythonProject1/main.py", line 5, in func val = val + 100UnboundLocalError: local variable 'val' referenced before assignment

私たちの問題の解決策に対処する前に、UnboundLocalErrorの背後にある根本的な原因を理解しなければなりません。UnboundLocalErrorsの根本原因:

変数が関数内で割り当てられている場合、Pythonではデフォルトでローカル変数として扱われます。 値が割り当てられたりバインドされたりする前にローカル変数が参照されている場合は、UnboundLocalError が発生します。 上記の例では、変数'val'func()関数内のPythonインタプリタによって読み取られるとき、'val'はローカル変数であると想定しています。 しかし、関数内で値が代入される前にローカル変数が参照されていることがすぐにわかります。 したがって、UnboundLocalErrorをスローします。

つまり、関数内のグローバル変数にのみアクセスできますが、関数内から変更することはできません(global またはnonlocalキーワードを使用してグローバルまたは非ローカル注:すべてのPython例外の親クラスはBaseExceptionです。 次の図は、UnboundLocalErrorの例外階層を表しています。

UnboundLocalError例外階層

UnboundLocalError が発生した理由と時期がわかったので、このエラーを克服するための可能性のある解決策を見てみましょう。

目次

方法1:グローバルキーワード

を使用するglobal キーワードを使用して、関数のローカルスコープからグローバル変数にアクセスして変更できます。 関数の外部で作成された変数はデフォルトでグローバルですが、関数内で作成された変数はデフォルトでローカルです。 したがって、関数内からグローバル変数を変更し、UnboundLocalErrorを回避するには、globalキーワードを使用できます。

上記の概念を単純化する次のコードを見てみましょう:

val = 100print("Value at First Usage: ", val)def func(): global val val = val + 100 print("Output after Modification within func(): ", val)func()

出力:

Value at First Usage: 100Output after Modification within func(): 200

方法2:非ローカルキーワード

を使用するnonlocal キーワードは、ネストされた関数がある場合に使用されます。 このような状況では、変数のローカルスコープが定義されていない可能性があります。

問題に対処するためのnonlocal キーワードの使用法を理解するために、次の例を見てみましょう。

def func(): val = 50 print("Output of func:", val) def foo(): nonlocal val val = val + 100 print("Output of foo:", val) foo() print("Output of func() after changes made to foo():", val)func()

出力

Output of func: 50Output of foo: 150Output of func() after changes made to foo(): 150

上記のプログラムでは、ネストされた関数foo()内の変数valとともにnonlocalキーワードを使用して非ローカル変数を作成します。 nonlocal 変数の値が変更された場合、変更はローカル変数にも反映されます。

免責事項:nonlocalキーワードはPython3以降でのみ動作します。

メソッド3: 変更可能なオブジェクトの使用

nonlocal はPython3より前のバージョンのPythonでは機能しないため、グローバル変数を作成したくない場合は、python辞書のような変更可能なオブジェクトを使用して値を格納することができます。

UnboundLocalErrorを克服するために、変更可能なオブジェクトの使用法を理解するために、次のプログラムを見てみましょう。

variables = { # creating a mutable object/dictionary 'val': 100}print('Output before Modification of val: ', variables)def func(): variables += 50 print('Output after Modification of val: ', variables)func()
Output before Modification of val: 100Output after Modification of val: 150

方法4:関数にパラメータを渡す

これは、私たちの問題を解決する伝統的な方法です。 グローバル変数を使用する代わりに、UnboundLocalErrorを避けるために定義された関数にパラメータを渡すことができます。 これをどのように行うことができるかを確認するために、次のコードを見てみましょう:

val = 100print("Value of val at first use: ", val)def func(v): v = v + 100 print("Output of val after modification:", v)func(val)

出力:

Value of val at first use: 100Output of val after modification: 200

グローバルキーワードと非ローカルキーワード

この記事を締めくくる前に、global 変数/キーワードとnonlocal 変数/キーワードの主な違いを見てみましょう。

  1. globalキーワードとは異なり、nonlocalキーワードはPython3以上でのみ動作します。
  2. globalキーワードは既存のグローバル変数または新しい変数で使用できますが、nonlocalキーワードは既存の変数で定義する必要があります。

結論

上記の議論から、コード内でUnboundLocalErrorを処理するには、次のいずれかの方法を使用できることがわかりました:

  1. global キーワードを使用します。
  2. 入れ子関数の場合はnonlocal キーワードを使用します。
  3. 変更可能なオブジェクトを使用します。
  4. 関数にパラメータを渡します。

この記事が参考になったことを願っており、読んだ後でUnboundLocalErrorを簡単に扱うことができます。 より興味深い記事をお楽しみにしてください。

ここからどこへ行く?

十分な理論、のは、いくつかの練習を取得してみましょう!

コーディングに成功するためには、そこに出て、現実の人々のために本当の問題を解決する必要があります。 それはあなたが簡単に六桁の稼ぎ手になることができる方法です。 そして、それはあなたが実際に本当に必要なスキルを磨く方法です。 結局のところ、誰も必要としない学習理論の使用は何ですか?

練習プロジェクトは、あなたがコーディングであなたの鋸をシャープにする方法です!

実際にお金を稼ぎ、人々の問題を解決する実用的なコードプロジェクトに焦点を当てて、コードマスターになりたいですか?

その後、Pythonフリーランスの開発者になります! たとえあなたが完全な初心者であっても、Pythonのスキルを向上させる作業に近づく最良の方法です。

私の無料ウェビナー”あなたの高収入スキルPythonを構築する方法”に参加し、私はオンラインで私のコーディングビジネスを成長させた方法を見て、どのようにすることができます,あまりにも-あなた自身の家の快適さから.

今すぐ無料のウェビナーに参加!