Fix „Int“-Objekt ist in Python nicht abonnierbar
In diesem Artikel untersuchen wir, wie man ein „int“-Objekt repariert, das in Python nicht abonnierbar ist. Aber vorher wollen wir verstehen, warum es auftritt und was es bedeutet.
Was ist der Fehler „Int“-Objekt ist nicht abonnierbar?
Der Fehler Das „int“-Objekt ist nicht abonnierbar tritt auf, wenn Sie versuchen, Indizierung oder Slicing für eine zu verwenden ganze Zahl , ein Datentyp, der diese Vorgänge nicht unterstützt.
Wie wir wissen, ist die Ganzzahl in Python ist ein Datentyp das stellt eine ganze Zahl dar. Im Gegensatz zu Listen oder Wörterbüchern enthalten Ganzzahlen keine Folge von Elementen und unterstützen daher weder Indizierung noch Slicing.
Wenn beispielsweise x = 42 (eine Ganzzahl) ist und wir versuchen, etwas wie x[0] zu tun, ist dies ein Versuch, auf das erste Element von x zuzugreifen, als ob x a wäre Liste oder ein Tupel . Da Ganzzahlen keine Sammlung von Elementen enthalten, ist dieser Vorgang ungültig und Sie erhalten einen TypeError: „int“ object is not subscriptable.
Beispiel
Python3
# Example causing 'int' object is not subscriptable error> x> => 42> # Attempting to use subscript notation on an integer> print> (x[> 0> ])> |
Ausgabe:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 4, in print(number[0]) TypeError: 'int' object is not subscriptable
Warum tritt der Fehler „Int“-Objekt ist nicht abonnierbar auf?
Der Fehler „Int“-Objekt ist nicht abonnierbar“ in Python entsteht aufgrund spezifischer Eigenschaften von Integer-Objekten (int). Hier sind die Gründe, warum dieser Fehler auftritt:
- Unveränderlichkeit von ganzen Zahlen
- Funktionsrückgabetyp stimmt nicht überein
- Keine iterierbare Struktur
Unveränderlichkeit von ganzen Zahlen
Da wir wissen, dass Ganzzahlen in Python unveränderlich sind, d. Saiten ), wobei auf Elemente mithilfe von Indizes zugegriffen oder diese geändert werden können.
Da ganze Zahlen keine veränderlichen Sequenzen sind, ist der Versuch, eckige Klammern zum Subskriptieren von Ergebnissen im „Int“-Objekt zu verwenden, kein subskriptierbarer Fehler.
Python3
# Example triggering 'Int' object is not subscriptable error> num> => 42> value> => num[> 0> ]> # Error: 'Int' object is not subscriptable> |
Ausgabe:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 3, in value = num[0] # Error: 'Int' object is not subscriptable TypeError: 'int' object is not subscriptable
Funktionsrückgabetyp stimmt nicht überein
In dieser Funktion wird erwartet, dass sie eine Liste oder ein Tupel zurückgibt, wenn die Bedingung „False“ ist, wie durch den else-Zweig angegeben.
Im else-Zweig gibt die Funktion jedoch eine Ganzzahl anstelle einer Liste oder eines Tupels zurück, was zum Fehler „Int“ Object Is Not Subscriptable führt
Python3
def> get_data(condition):> > '''> > This function is expected to return a list or tuple,> > but under certain conditions, it returns an integer.> > '''> > if> condition:> > return> [> 1> ,> 2> ,> 3> ]> # Returns a list> > else> :> > return> 42> # Returns an integer> > # Function call with a condition that leads to an integer being returned> result> => get_data(> False> )> > # Attempting to index the result, which is an integer in this case> first_element> => result[> 0> ]> |
Ausgabe:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 15, in first_element = result[0] TypeError: 'int' object is not subscriptable
Keine iterierbare Struktur
Wie wir wissen, fehlt ganzen Zahlen die iterierbare Struktur, die für die Subskription erforderlich ist. Iterierbare Objekte wie Listen oder Strings verfügen über eine genau definierte Folge von Elementen, auf die über Indizes zugegriffen werden kann.
Der Versuch, eckige Klammern für eine Ganzzahl zu verwenden, bedeutet, sie so zu behandeln, als ob sie iterierbare Eigenschaften hätte, was zum Fehler „Int“-Objekt ist nicht subskribierbar führt.
Python3
# Example demonstrating misinterpretation of syntax> integer_value> => 123> value> => integer_value[> 0> ]> |
Ausgabe:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 3, in value = integer_value[0] # Error: 'Int' object is not subscriptable TypeError: 'int' object is not subscriptable
Lösen Sie, dass das „Int“-Objekt in Python nicht abonnierbar ist
- Verwenden Sie Zeichenfolgen oder Listen anstelle von Ganzzahlen
- Überprüfen Sie die Variablentypen
- Überprüfen Sie die Codelogik:
Lassen Sie uns sie im Detail studieren
Verwenden Sie Zeichenfolgen oder Listen anstelle von Ganzzahlen
In Python ist die Indexnotation auf Zeichenfolgen und Listen anwendbar. So können wir Ganzzahlen in einen String oder eine Liste konvertieren, bevor wir die Indexnotation verwenden.
Python3
# Converting integer to string and using subscript notation> number> => 42> number_str> => str> (number)> print> (number_str[> 0> ])> |
Ausgabe
4
Überprüfen Sie die Variablentypen
Wir müssen sicherstellen, dass die von uns verwendete Variable den erwarteten Typ hat, den wir haben möchten. Wenn es sich um eine Sequenz (String oder Liste) handeln soll, stellen Sie sicher, dass ihr nicht versehentlich ein ganzzahliger Wert zugewiesen wird.
Python3
# Checking variable type before using subscript notation> number> => 42> if> isinstance> (number, (> str> ,> list> )):> > print> (number[> 0> ])> else> :> > print> (> > f> 'Error: Variable type '{type(number).__name__}' is not subscriptable.'> )> |
Ausgabe
Error: Variable type 'int' is not subscriptable.
Überprüfen Sie die Codelogik
Untersuchen Sie Ihre Codelogik, um festzustellen, ob die Indexnotation wirklich erforderlich ist. Wenn nicht, überarbeiten Sie den Code, um die tiefgestellten Ganzzahlen zu vermeiden.
Python3
# Reviewing code logic to avoid subscripting integers> number> => 42> number_str> => str> (number)> print> (number_str[> 0> ])> |
Ausgabe
4
Abschluss
Aus den oben genannten Informationen können wir sagen TypeError : Der Fehler „int“-Objekt ist nicht subskriptierbar in Python tritt normalerweise aufgrund einer Typinkongruenz auf, bei der eine Ganzzahl fälschlicherweise als subskribierbares Objekt wie eine Liste oder ein Tupel behandelt wird. Um dies zu verhindern, ist es daher wichtig, die Datentypen konsequent zu überprüfen, insbesondere wenn es um dynamische oder komplexe Datenstrukturen geht.