Python TypeError: Funktionsobjekt ist nicht abonnierbar

Salman Mehmood 21 Juni 2023
  1. Typfehler des Funktionsobjekts in Python behoben
  2. Funktionsobjekttypfehler mit leerer Liste in Python behoben
Python TypeError: Funktionsobjekt ist nicht abonnierbar

In diesem Artikel wird erläutert, warum wir einen Fehler namens TypeError: 'function' object is not subscriptable erhalten und wie wir diesen Fehler in Python beheben können.

Typfehler des Funktionsobjekts in Python behoben

Wenn Sie ein Programmieranfänger sind, können beim Ausführen eines Programms Fehler auftreten. Manchmal versuchen Sie, diesen Fehler zu beheben, finden es jedoch schwierig, weil Sie nicht versuchen zu verstehen, warum dieser Fehler während der Ausführung auftritt.

Angenommen, wir haben eine Liste von Mitarbeitern und möchten sie in die Funktion einschließen, um sie später in der Klasse oder im Modul wiederzuverwenden. Wenn wir diese Funktion aufrufen, erhalten wir eine Fehlermeldung mit der Aufschrift TypeError: 'function' object is not subscriptable.

Beispielcode:

Employee_Name = ["Max", "Harry", "Ben", "Simon", "Thomas"]


def Employee_Name(n):
    for i in range(5):
        print(n[i])


Employee_Name(Employee_Name)

Ausgang:

TypeError: 'function' object is not subscriptable

Im obigen Python-Skript durchlaufen wir die Liste der Elemente und der Fehler tritt auf, weil wir anstelle einer Liste eine Funktion innerhalb der Funktion übergeben.

Die Variable n enthält eine Funktion, und wenn wir innerhalb der Schleife versuchen, auf einen Index der Variablen n zuzugreifen, erhalten wir den Fehler, weil wir nicht auf einen Index von einem Objekt zugreifen können, das nicht subskriptierbar oder iterierbar ist.

Anfänger neigen dazu, es zu beheben, aber andere erhalten möglicherweise einen anderen Fehler, wie in der folgenden Ausgabe.

Beispielcode:

def Employee_Name(n):
    for i in range(5):
        print(n[i])


Employee_Name = ["Max", "Harry", "Ben", "Simon", "Thomas"]

Employee_Name(Employee_Name)

Ausgang:

TypeError: 'list' object is not callable

Denken Sie, dass der Fehler behoben werden kann, wenn eine Liste nach der Definition der Funktion deklariert wird, obwohl Funktion und Liste denselben Namen haben. Nach dem Ausführen des Codes erhält der Benutzer einen weiteren Fehler.

Der Grund ist, dass während einer Variablendeklaration der Funktionsname Employee_Name mit einer Variablen überschrieben wird, die eine Liste ist, und wir können keine Liste aufrufen. Die einfache Lösung besteht darin, niemals denselben Namen mit einem anderen Objekt zu verwenden, das Sie für eine Funktion verwendet haben.

Beispielcode:

def Employee_Name(n):
    for i in range(5):
        print(n[i])


Employee_Names = ["Max", "Harry", "Ben", "Simon", "Thomas"]

Employee_Name(Employee_Names)

Wir haben den Variablennamen Employee_Name in Employee_Names geändert.

Ausgang:

Max
Harry
Ben
Simon
Thomas

Funktionsobjekttypfehler mit leerer Liste in Python behoben

Ein weiterer Grund besteht darin, den TypeError: 'function' object is not subscriptable zu erhalten, wenn wir aus irgendeinem Grund versuchen, eine leere Liste der Liste zu erstellen. Schauen wir uns ein Beispiel an.

Beispielcode:

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])

Ausgang:

TypeError: 'function' object is not subscriptable

Wenn wir die Funktion aufrufen, müssen wir die öffnende und schließende Funktionsklammer ((Funktion)) in den Funktionsnamen einfügen. Angenommen, wir setzen eckige Klammern ([Funktion]) hinein, was dem Verhalten einer Funktion widerspricht, sie mit eckigen Klammern aufzurufen.

Einige Benutzer machen einen weiteren Fehler, weil sie eine Liste einer Liste haben möchten. Wenn sie versuchen, das innerhalb der öffnenden und schließenden Klammern zu beheben, übergeben sie eine Liste in eckigen Klammern und erhalten einen weiteren Fehler.

Beispielfehler:

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]))

Ausgang:

IndexError: list index out of range

Ein Grund für diesen Fehler ist das Übergeben einer Liste einer Liste mit der Länge 1, deren Index außerhalb des zulässigen Bereichs liegt, wenn wir ihn innerhalb der for-Schleife durchlaufen. Die einfache Lösung besteht darin, anstatt eckige Klammern innerhalb der Funktion ([Employee_Names]) zu verwenden, müssen wir eckige Klammern in die Variable Empty_List setzen, wo wir sie zurückgeben.

Beispielcode:

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))

Ausgang:

[['Max', 'Harry', 'Ben', 'Simon', 'Thomas']]
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

Verwandter Artikel - Python Error