NameError を修正: Python で変数が定義されていません

Zeeshan Afridi 2023年6月21日
  1. Python の変数のスコープ
  2. Python の NameError
  3. Python の NameError: Variable is not defined を修正
NameError を修正: Python で変数が定義されていません

この記事では、Python の NameError の原因と、特定のエラー NameError: 変数が定義されていません を修正する方法について説明します。

Python の変数のスコープ

変数のスコープは、特定のブロックからアクセスできるかどうかに関係なく、変数にアクセシビリティ制約を実装します。 一部の変数の有効期間は特定のブロック内だけですが、他の変数はプログラム全体でアクセスできます。

例を通してそれを理解しましょう:

# global scope
a = 3

# Function to add two numbers


def displayScope():

    # local varaible
    b = 2
    # sum a and b
    c = a + b

    print("The sum of a & b = ", c)


displayScope()

出力:

The sum of a & b =  5

この例では、変数 a が先頭で定義されており、ブロックで囲まれていないため、プログラム全体でアクセスできます。 ただし、変数 b は関数ブロック内でローカルに定義されています。 したがって、ブロックの外からはアクセスできません。

Python の NameError

Python では、変数、ライブラリ、関数、または一重引用符または二重引用符のない文字列の実行中に実行時に NameError が発生します。これらはコード内の宣言のない型です。 次に、スコープがローカルでグローバルにアクセスできない関数または変数を呼び出すと、Python インタープリターは NameError をスローし、name 'name' が定義されていません と伝えます。

Python での NameError の原因

NameError の原因は、無効な関数、変数、またはライブラリへの呼び出しです。 理由を明確に理解するために、例を挙げてみましょう。

# invalid funciton call
def test_ftn():
    return "Test function"


print(test_ft())  # calling the the function which does not exist

# printing invalid varaible
name = "Zeeshan Afridi"
print(Name)  # printing variable `Name` which does not exist

どちらも Python の NameError の原因です。最初の例では、使用できない関数を呼び出したためです。 関数名は test_ftn ですが、test_ft 関数を呼び出しています。

2 番目の例では、name 変数が文字列 Zeeshan Afridi に割り当てられていますが、プログラムで宣言されていない Name を出力しています。 これが、NameError: name 'test_ft' is not defined を取得した理由です。

Python の NameError: Variable is not defined を修正

上記の例では、スコープ外の変数を呼び出したため、NameError が発生しました。 この NameError: variable is not defined を修正する方法を見てみましょう。

# global scope
a = 3

# Function to add two numbers


def displayScope():

    # local varaible
    b = 2


print("The value of a = ", a)
print("The value of b = ", b)

出力:

The value of a =  3
NameError: name 'b' is not defined

上記のコードは、プログラム全体でアクセスできるため、a の値を表示しています。 一方、変数 b はローカルで定義されているため、関数 displayScope() にのみ認識されます。 スコープ外にアクセスすることはできません。

これにより、エラー NameError: name 'b' is not defined が発生しました。

幸いなことに、Python はこの問題を解決するために global 予約キーワードを導入しました。 この global 予約キーワードは、ローカル変数のスコープを拡大して、プログラム全体で変数にグローバルにアクセスできるようにするために使用されます。

例を通してそれを理解しましょう:

# global scope
a = 3

# Function to add two numbers


def displayScope():

    # local scope
    global c
    z = 2
    c = a + b


print("The value of c =", c)

出力:

The value of c = 5

この例では、変数 cdisplayScope() のローカル スコープ内で定義されていますが、魔法のキーワード global によりグローバルにアクセスできます。 現在、cglobal として定義されているため、どこからでもアクセスできます。

著者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

関連記事 - Python Error