Das Verständnis des Python-Typsystems ist der Schlüssel zur Lösung dieses kniffligen Fehlers.

Versuchen Sie, Daten von einem Objekt abzurufen und sehen stattdessen den Fehler „Objekt ist nicht abonnierbar“? Das Problem ist, dass Sie den falschen Datentyp indizieren.

Erfahren Sie alles über abonnierbare Typen und wie Sie diesen Fehler beheben können.

Was bedeutet „subskriptierbar“ in Python?

Der Begriff „subskriptierbar“ bezeichnet in Python einen Datentyp, der mehrere Werte speichert, auf die Sie einzeln zugreifen können. Sie können auf einen bestimmten Wert eines subskribierbaren Datentyps über dessen Index zugreifen, indem Sie die Notation in eckigen Klammern ([]) verwenden.

Wenn Sie versuchen, auf die Elemente in einem Datentyp zuzugreifen, der nicht indizierbar ist, löst Python die Ausnahme „TypeError: Objekt ist nicht subskribierbar“ aus.

Die folgenden Datentypen sind in Python abonnierbar: Listen, Zeichenfolgen, Tupel und Wörterbücher.

list_example = [1, 3, 5, „Idowu“]
string_example = „Idowu Omisola“
tuple_example = (1, 3, 5, „Idowu“)
dict_example = {"Name": „Idowu“, "Sprache": „Yoruba“}

drucken (list_example[0]) # 1
print (string_example[3]) # w
drucken (tuple_example[1]) # 3
drucken (dict_example["Name"]) # Idowu

Auf Mengen, ganze Zahlen, Gleitkommazahlen und boolesche Werte kann jedoch nicht über die Indizierung zugegriffen werden, sodass sie nicht abonnierbar sind:

float_example = 12.45
int_example = 12367
bool_example = WAHR
set_example = {1, 3, 5, "Python"}

drucken (float_example[1])
print (bool_example[2])
print (int_example[2])
drucken (set_example[2])

Beim Versuch, jede dieser Anweisungen auszuführen, wird die Ausnahme „Objekt ist nicht abonnierbar“ ausgegeben:

Beheben der Ausnahme

Das Auflösen der Ausnahme „Objekt ist nicht abonnierbar“ ist einfacher, wenn Sie die Regeln für den Zugriff auf die einzelnen Datentypen verstanden haben. Beginnen Sie also mit dem Python-Debuggen, indem Sie den Datentyp des Objekts überprüfen, das Sie indizieren möchten.

float_example = 12.45
int_example = 12367
bool_example = WAHR
set_example = {1, 3, 5, "Python"}

print (Typ (float_example)) #
print (Typ (int_example)) #
print (Typ (bool_example)) #
print (Typ (set_example)) #

Sobald Sie feststellen, dass der Datentyp nicht abonnierbar ist, wird das Problem durch Konvertieren in einen indizierbaren Typ behoben. Dies ist praktisch, wenn die Daten von stammen eine Drittanbieter-API. Durch die Konvertierung von Datentypen wie Integer, Float und Boolean in einen String werden sie abonnierbar:

print (str (float_example)[:2]) # 12
print (str (int_example)[:2]) # 12
print (str (bool_example)[:2]) # Tr

Du kannst sogar manipulieren Sie die resultierenden Python-Strings wie du willst. Wenn Sie mit Ganzzahl und Gleitkomma arbeiten, möchten Sie möglicherweise den ursprünglichen Datentyp in der Ausgabe beibehalten. Konvertieren Sie dazu die resultierenden Werte in ihren ursprünglichen Datentyp, nachdem Sie sie als Zeichenfolgen indiziert haben:

Converted_float = float (str (float_example)[:2])
umgewandelt_int = int (str (int_example)[:2])

# 12.0 Datentyp:
print (converted_float, f'Datentyp:{Typ (converted_float)}')

# 12 Datentyp:
print (converted_int, f'Datentyp:{type (converted_int)}')

Eine Menge können Sie in eine Liste umwandeln. Obwohl Sie ein festgelegtes Objekt mithilfe von in eine Liste umwandeln können Liste (Satz) Python-Einzeiler, dadurch bleiben die Elementpositionen in der resultierenden Liste nicht erhalten. Um sicherzustellen, dass Sie eine Liste mit beibehaltenen Elementpositionen erhalten, verwenden Sie die Lambda-Funktion von Python wie folgt:

set_example = {1, 3, 5, "Python"}
konvertiert = sortiert (set_example, key=Lambda x: (isinstance (x, str), x))

print (konvertiert[3]) # Python

Master-Python-Debugging

Python hat eine reibungslose Lernkurve. Aber einfache Ausnahmen können Sie abschrecken, wenn Sie nicht wissen, wie Sie damit umgehen sollen. Wenn Sie lernen, Ihren Code zu debuggen und sich Zeit für die Problemlösung nehmen, können Sie Python-Codierungsfehler und -Ausnahmen beheben.