Fix 'Int'-objekt kan ikke abonneres i Python

I denne artikkelen vil vi studere hvordan du fikser 'int'-objekt som ikke kan abonneres i Python. Men før det la oss forstå hvorfor det oppstår og hva det betyr.

Hva er 'Int' Object Is Not Subscriptable Error?

Feilen 'int'-objektet kan ikke abonneres oppstår når du prøver å bruke indeksering eller skjæring på en heltall , en datatype som ikke støtter disse operasjonene.

Som vi kjenner heltall i Python er en data-type som representerer et helt tall. I motsetning til lister eller ordbøker, inneholder ikke heltall en sekvens av elementer og støtter derfor ikke indeksering eller oppdeling.
For eksempel, hvis x = 42 (et heltall), og vi prøver å gjøre noe som x[0], er det et forsøk på å få tilgang til det første elementet i x som om x var en liste eller a tuppel . Siden heltall ikke inneholder en samling av elementer, er denne operasjonen ikke gyldig, og du får en TypeError: 'int'-objekt kan ikke abonneres.

Eksempel

Python3




# Example causing 'int' object is not subscriptable error> x> => 42> # Attempting to use subscript notation on an integer> print> (x[> 0> ])>

Produksjon:

Hangup (SIGHUP) Traceback (most recent call last):  File 'Solution.py', line 4, in   print(number[0]) TypeError: 'int' object is not subscriptable 

Hvorfor oppstår ikke 'Int'-objekt er abonnentfeil?

'Int'-objektet kan ikke abonneres feil i Python oppstår på grunn av spesifikke egenskaper til heltalls (int)-objekter. Her er grunner til at denne feilen oppstår:

  • Uforanderlighet av heltall
  • Funksjon Return Type Mismatch
  • Ingen gjentakelig struktur

Uforanderlighet av heltall

Ettersom vi vet at heltall i Python er uforanderlige, betyr det at verdiene deres ikke kan endres etter opprettelse og abonnements- eller indekseringsoperasjoner gjelder for mutbare sekvenser (f.eks. lister, strenger ), der elementer kan nås eller endres ved hjelp av indekser.

Siden heltall ikke er mutbare sekvenser, er det ikke en feil som kan abonneres på å prøve å bruke firkantede parenteser for å abonnere resultater i 'Int'-objektet.

Python3




# Example triggering 'Int' object is not subscriptable error> num> => 42> value> => num[> 0> ]> # Error: 'Int' object is not subscriptable>

Produksjon:

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 

Funksjon Return Type Mismatch

I denne funksjonen forventes det å returnere en liste eller tuppel når betingelsen er False, som indikert av den andre grenen.

I den andre grenen returnerer imidlertid funksjonen et heltall i stedet for en liste eller tuppel, noe som resulterer i feilen 'Int' Object Is Not Subscriptable

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

Produksjon:

Hangup (SIGHUP) Traceback (most recent call last):  File 'Solution.py', line 15, in   first_element = result[0] TypeError: 'int' object is not subscriptable 

Ingen gjentakelig struktur

Som vi vet mangler heltall den iterable strukturen som kreves for å abonnere. Iterable objekter, for eksempel lister eller strenger, har en veldefinert sekvens av elementer som kan nås ved hjelp av indekser.

Forsøk på å bruke firkantede parenteser på et heltall innebærer å behandle det som om det har iterable egenskaper, noe som resulterer i at 'Int'-objektet ikke er abonnentfeil.

Python3




# Example demonstrating misinterpretation of syntax> integer_value> => 123> value> => integer_value[> 0> ]>

Produksjon:

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øs 'Int'-objekt kan ikke abonneres i Python

  • Bruk strenger eller lister i stedet for heltall
  • Sjekk variabeltyper
  • Gjennomgå kodelogikk:

La oss studere dem i detalj

Bruk strenger eller lister i stedet for heltall

I Python er abonnentnotasjon gjeldende for strenger og lister. Så vi kan konvertere heltall til en streng eller liste før vi bruker subscript notation.

Python3




# Converting integer to string and using subscript notation> number> => 42> number_str> => str> (number)> print> (number_str[> 0> ])>

Produksjon

4 

Sjekk variabeltyper

Vi må sørge for at variabelen vi bruker er av den forventede typen vi vil at den skal være. Hvis det er ment å være en sekvens (streng eller liste), sørg for at den ikke ved en feiltakelse er tildelt en heltallsverdi.

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

Produksjon

Error: Variable type 'int' is not subscriptable. 

Gjennomgå kodelogikk

Undersøk kodelogikken din for å finne ut om abonnentnotasjon er virkelig nødvendig. Hvis ikke, revider koden for å unngå å abonnere på heltall.

Python3




# Reviewing code logic to avoid subscripting integers> number> => 42> number_str> => str> (number)> print> (number_str[> 0> ])>

Produksjon

4 

Konklusjon

Fra informasjonen ovenfor kan vi si TypeError : 'int'-objekt kan ikke abonneres feil i Python skjer vanligvis på grunn av en typemismatch der et heltall feilaktig behandles som et abonnerbart objekt som en liste eller tuppel. Så for å forhindre dette, er det avgjørende å konsekvent sjekke datatyper, spesielt når du arbeider med dynamiske eller komplekse datastrukturer.