Lösen Sie den TypeError: Nonetype Object Is Not Subscriptable in Python
-
das
TypeError: 'NoneType' object is not subscriptable
in Python -
Lösen Sie den
TypeError: 'NoneType' object is not subscriptable
in Python - Abschluss
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
- Adresse wird bereits verwendet Fehler in Python
- AttributeError: __Exit__ in Python
- AttributeError: 'Dict'-Objekt hat kein Attribut 'Append' in Python
- AttributeError: 'NoneType'-Objekt hat kein Attribut 'Text' in Python
- AttributeError: Int-Objekt hat kein Attribut
- AttributeError: Modul Urllib hat keine Attributanforderung