Python TypeError: 関数オブジェクトは添字可能ではありません

Salman Mehmood 2023年6月21日
  1. Python の Function Object TypeError を修正
  2. Python で空のリストを使用した Function Object TypeError を修正
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_NameEmployee_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']]
著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

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