HOWTO · Python
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
この例では、変数 c は displayScope() のローカル スコープ内で定義されていますが、魔法のキーワード global によりグローバルにアクセスできます。 現在、c は global として定義されているため、どこからでもアクセスできます。