Lösen Sie den TypeError: Nonetype Object Is Not Subscriptable in Python

Shikha Chaudhary 21 Juni 2023
  1. das TypeError: 'NoneType' object is not subscriptable in Python
  2. Lösen Sie den TypeError: 'NoneType' object is not subscriptable in Python
  3. Abschluss
Lösen Sie den TypeError: Nonetype Object Is Not Subscriptable in Python

Python verfügt über verschiedene Sequenzdatentypen wie Listen, Tupel und Wörterbücher, die die Indizierung unterstützen. Da sich der Begriff Index auf den während der Indizierung verwendeten Wert bezieht, werden diese Objekte auch als subskriptierbare Objekte bezeichnet.

In Python führt eine fehlerhafte Indizierung solcher subskriptierbarer Objekte oft zu TypeError: 'NoneType' object is not subscriptable. In diesem Artikel werden wir diesen Fehler und die möglichen Lösungen zu seiner Behebung besprechen.

Bereit? Lass uns anfangen!

das TypeError: 'NoneType' object is not subscriptable in Python

Bevor wir uns ansehen, warum der TypeError: 'NoneType' object is not subscriptable auftritt und wie man ihn behebt, lassen Sie uns zunächst einige Grundlagen aus dem Weg räumen.

Einführung in NoneType und subskriptierbare Objekte in Python

In Python ist ein NoneType-Objekt ein Objekt, das keinen Wert hat. Mit anderen Worten, es ist ein Objekt, das nichts zurückgibt.

Der Wert None wird oft von Funktionen zurückgegeben, die nach etwas suchen, es aber nicht finden. Unten ist ein Beispiel, wo eine Funktion den Wert None zurückgibt.

def none_demo():
    for i in [1, 2, 3, 4, 5]:
        if i == 10:
            return yes


ans = none_demo()
print(ans)

Ausgang:

None

Apropos abonnierbare Objekte, wie der Name schon sagt, dies sind Python-Objekte, die abonniert oder indiziert werden können. Einfacher ausgedrückt sind subskriptierbare Objekte diejenigen Objekte, auf die mit Hilfe von Indexwerten wie 0, 1 usw. zugegriffen oder diese durchlaufen werden können.

Listen, Tupel und Wörterbücher sind Beispiele für solche Objekte. Unten ist ein Code, der zeigt, wie Sie eine Liste mit Hilfe der Indizierung durchlaufen können.

cakes = ["Mango", "Vanilla", "Chocolate"]
for i in range(0, 3):
    print(cakes[i])

Ausgang:

Mango
Vanilla
Chocolate

Jetzt kennen Sie die Grundlagen gut, also machen wir weiter!

Lösen Sie den TypeError: 'NoneType' object is not subscriptable in Python

In Python gibt es einige eingebaute Funktionen wie reverse(), sort() und append(), die wir für subskriptierbare Objekte verwenden können. Wenn wir aber die Ergebnisse dieser eingebauten Funktionen einer Variablen zuweisen, ergibt sich der TypeError: 'NoneType' object is not subscriptable.

Sehen Sie sich das unten angegebene Beispiel an. Hier haben wir die Funktion reverse() auf die Liste desserts angewendet und das Ergebnis in der Variablen ans gespeichert.

Dann haben wir den Wert der Variable ans gedruckt, der sich als None herausstellt, wie in der Ausgabe zu sehen ist. Die letzte Anweisung führt jedoch zum TypeError: 'NoneType' object is not subscriptable.

Irgendwelche Vermutungen, warum das passiert ist?

desserts = ["cakes", "pie", "cookies"]
ans = desserts.reverse()
print("The variable ans contains: ", ans)
print(ans[0])

Ausgang:

The variable ans contains:  None
Traceback (most recent call last):
  File "<string>", line 4, in <module>
TypeError: 'NoneType' object is not subscriptable

Dies geschah, weil wir in der letzten Zeile die Variable ans subskriptieren. Wir wissen, dass die Variable ans den Wert None enthält, der nicht einmal ein Sequenzdatentyp ist; Daher kann nicht durch Indizierung darauf zugegriffen werden.

Wichtig zu verstehen ist hier, dass wir zwar die umgekehrte Liste der Variablen ans zuweisen, die Variable ans aber dadurch nicht zu einem Listentyp wird. Wir können also nicht über Indizierung auf die Variable ans zugreifen, da wir sie uns wie eine Liste vorstellen.

In Wirklichkeit ist die Variable ans ein NoneType-Objekt, und Python unterstützt die Indizierung solcher Objekte nicht. Man darf also nicht versuchen, ein nicht subskriptierbares Objekt zu indizieren, sonst führt dies zum TypeError: 'NoneType' object is not subscriptable.

Um dieses Problem anhand des obigen Codes zu beheben, gehen Sie wie folgt vor.

Diesmal weisen wir das Ergebnis der Operation reverse() keiner Variablen zu. Auf diese Weise ersetzt die Funktion automatisch die aktuelle Liste durch die umgekehrte Liste ohne zusätzliches Leerzeichen.

Später können wir die Liste nach Belieben ausdrucken. Hier drucken wir zuerst die gesamte umgekehrte Liste und greifen dann mit dem Index 0 auf das erste Element zu.

Wie Sie sehen können, läuft der Code einwandfrei und liefert die gewünschte Ausgabe.

desserts = ["cakes", "pie", "cookies"]
desserts.reverse()
print(desserts)
print(desserts[0])

Ausgang:

['cookies', 'pie', 'cakes']
cookies

Die gleiche Regel, das Ergebnis keiner Variablen zuzuweisen und dann zu indizieren, gilt auch für andere Funktionen wie sort() und append(). Unten ist ein Beispiel, das die Funktion sort() verwendet und auf TypeError: 'NoneType' object is not subscriptable stößt.

desserts = ["cakes", "pie", "cookies"]
ans = desserts.sort()
print("The value of the variable is: ", ans)
print(ans[1])

Ausgang:

The value of the variable is:  None
Traceback (most recent call last):
  File "<string>", line 4, in <module>
TypeError: 'NoneType' object is not subscriptable

Auch dies geschieht aus dem gleichen Grund. Wir müssen auf die Verwendung einer anderen Variablen zum Speichern der sortierten Liste verzichten, um diesen Fehler zu beseitigen.

Dies geschieht unten.

desserts = ["cakes", "pie", "cookies"]
desserts.sort()
print(desserts)
print(desserts[1])

Ausgang:

['cakes', 'cookies', 'pie']
cookies

Sie können sehen, dass diesmal die Methode sort() die Liste durch die neue sortierte Liste ersetzt, ohne zusätzlichen Platz zu benötigen. Später können wir über die Indizierung auf die einzelnen Elemente der sortierten Liste zugreifen, ohne uns um diesen Fehler kümmern zu müssen!

Und hier ist etwas Interessantes. Bereit, es zu hören?

Wenn Sie im Fall der Funktion sort() dennoch eine separate Variable zum Speichern der sortierten Liste verwenden möchten, können Sie die Funktion sorted() verwenden. Dies geschieht unten.

desserts = ["cakes", "pie", "cookies"]
ans = sorted(desserts)
print(ans)
print(ans[0])

Ausgang:

['cakes', 'cookies', 'pie']
cakes

Sie sehen, dass dies zu keinem Fehler führt, da die Funktion sorted() eine sortierte Liste zurückgibt, im Gegensatz zur Methode sort(), die die Liste an Ort und Stelle sortiert.

Aber leider haben wir keine solchen alternativen Funktionen für die Methoden reverse() und append().

Das ist es für diesen Artikel. Weitere Informationen zu diesem Thema finden Sie in dieser Dokumentation.

Abschluss

Dieser Artikel hat uns etwas über den TypeError 'NoneType' object not subscriptable in Python beigebracht. Wir haben gesehen, wie die Zuweisung der Werte von Operationen wie reverse() und append() an Sequenzdatentypen zu Variablen zu diesem Fehler führt.

Wir haben auch gesehen, wie wir diesen Fehler beheben können, indem wir die Funktion sorted() anstelle der Funktion sort() verwenden, um diesen Fehler von vornherein zu vermeiden.

Verwandter Artikel - Python Error