Python TypeError: 関数オブジェクトは添字可能ではありません
この記事では、TypeError: 'function' object is not subscriptable
というエラーが発生する理由と、Python でこのエラーを修正する方法について説明します。
Python の Function Object TypeError を修正
プログラミング初心者の場合、プログラムの実行中にエラーが発生することがあります。 このエラーを修正しようとしても、実行中にこのエラーが発生する理由を理解しようとしていないため、難しいと感じる場合があります。
たとえば、従業員のリストがあり、それを関数内にラップして、後でクラスまたはモジュール内で再利用したいとします。 この関数を呼び出すと、TypeError: 'function' object is not subscriptable
というエラーが表示されます。
コード例:
Employee_Name = ["Max", "Harry", "Ben", "Simon", "Thomas"]
def Employee_Name(n):
for i in range(5):
print(n[i])
Employee_Name(Employee_Name)
出力:
TypeError: 'function' object is not subscriptable
上記の Python スクリプトでは、アイテムのリストをループします。リストではなく関数内で関数を渡すため、エラーが発生します。
n
変数には関数が含まれており、ループ内で n
変数のインデックスにアクセスしようとすると、添字可能または反復可能でないオブジェクトからインデックスにアクセスできないため、エラーが発生します。
初心者はそれを修正する傾向がありますが、次の出力のように、別のエラーが発生する可能性があります。
コード例:
def Employee_Name(n):
for i in range(5):
print(n[i])
Employee_Name = ["Max", "Harry", "Ben", "Simon", "Thomas"]
Employee_Name(Employee_Name)
出力:
TypeError: 'list' object is not callable
関数とリストが同じ名前でも、関数を定義した後にリストを宣言すれば、エラーを修正できると考えています。 コードを実行した後、ユーザーは別のエラーを受け取ります。
その理由は、変数の宣言中に Employee_Name
関数名がリストである変数でオーバーライドされ、リストを呼び出すことができないためです。 簡単な解決策は、関数に使用した別のオブジェクトと同じ名前を決して使用しないことです。
コード例:
def Employee_Name(n):
for i in range(5):
print(n[i])
Employee_Names = ["Max", "Harry", "Ben", "Simon", "Thomas"]
Employee_Name(Employee_Names)
変数名 Employee_Name
を Employee_Names
に変更しました。
出力:
Max
Harry
Ben
Simon
Thomas
Python で空のリストを使用した Function Object TypeError を修正
もう 1つの理由は、何らかの理由でリストの空のリストを作成しようとすると、TypeError: 'function' object is not subscriptable
を取得することです。 例を見てみましょう。
コード例:
Empty_List = []
def Employee_Name(n):
for i in range(5):
Empty_List.append(n[i])
return Empty_List
Employee_Names = ["Max", "Harry", "Ben", "Simon", "Thomas"]
print(Employee_Name[Employee_Names])
出力:
TypeError: 'function' object is not subscriptable
関数を呼び出すときは、関数名に関数の開始括弧と終了括弧 ((function)
) を入れる必要があります。 角括弧 ([関数]
) を入れたとします。これは、角括弧を使用して呼び出す関数の動作に反します。
一部のユーザーは、リストのリストが必要なため、別の間違いを犯します。 開き括弧と閉じ括弧内でそれを修正しようとすると、角括弧内のリストが渡され、別のエラーが発生します。
エラー例:
Empty_List = []
def Employee_Name(n):
for i in range(5):
Empty_List.append(n[i])
return Empty_List
Employee_Names = ["Max", "Harry", "Ben", "Simon", "Thomas"]
print(Employee_Name([Employee_Names]))
出力:
IndexError: list index out of range
このエラーが発生する理由の 1つは、長さが 1
のリストのリストを渡すことであり、for
ループ内で反復すると、そのインデックスが範囲外になります。 簡単な解決策は、関数 ([Employee_Names]
) 内で角括弧を使用する代わりに、それを返す Empty_List
変数内に角括弧を配置することです。
コード例:
Empty_List = []
def Employee_Name(n):
for i in range(5):
Empty_List.append(n[i])
return [Empty_List]
Employee_Names = ["Max", "Harry", "Ben", "Simon", "Thomas"]
print(Employee_Name(Employee_Names))
出力:
[['Max', 'Harry', 'Ben', 'Simon', 'Thomas']]
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn関連記事 - Python Error
- AttributeError の解決: 'list' オブジェクト属性 'append' は読み取り専用です
- AttributeError の解決: Python で 'Nonetype' オブジェクトに属性 'Group' がありません
- AttributeError: 'generator' オブジェクトに Python の 'next' 属性がありません
- AttributeError: 'numpy.ndarray' オブジェクトに Python の 'Append' 属性がありません
- AttributeError: Int オブジェクトに属性がありません
- AttributeError: Python で 'Dict' オブジェクトに属性 'Append' がありません