I den här artikeln kommer vi att studera hur man fixar 'int'-objekt som inte är prenumerationsbart i Python. Men innan dess låt oss förstå varför det uppstår och vad det betyder.
Vad är 'Int' Object Is Not Subscriptable Error?
Felet 'int'-objekt kan inte tecknas inträffar när du försöker använda indexering eller skivning på en heltal , en datatyp som inte stöder dessa operationer.
Som vi vet heltal i Pytonorm är en data typ som representerar ett heltal. Till skillnad från listor eller ordböcker, innehåller inte heltal en sekvens av element och stöder därför inte indexering eller segmentering.
Till exempel, om x = 42 (ett heltal) och vi försöker göra något som x[0], är det ett försök att komma åt det första elementet i x som om x var en lista eller a tuppel . Eftersom heltal inte innehåller en samling objekt är den här operationen inte giltig och du får ett TypeError: 'int'-objekt kan inte tecknas.
Exempel
Python3
# Example causing 'int' object is not subscriptable error> x>=> 42> # Attempting to use subscript notation on an integer> print>(x[>0>])> |
>
>
Produktion:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 4, in print(number[0]) TypeError: 'int' object is not subscriptable>
Varför uppstår inte ett 'Int'-objekt som kan tecknas?
'Int'-objektet är inte teckningsbart fel i Python uppstår på grund av specifika egenskaper hos heltalsobjekt (int). Här är anledningarna till att det här felet uppstår:
- Heltals oföränderlighet
- Funktion Return Typ Missmatch
- Ingen itererbar struktur
Heltals oföränderlighet
Eftersom vi vet att heltal i Python är oföränderliga, vilket innebär att deras värden inte kan ändras efter skapande och prenumerations- eller indexeringsoperationer är tillämpliga på föränderliga sekvenser (t.ex. listor, strängar ), där element kan nås eller ändras med hjälp av index.
hur man läser från en csv-fil i java
Eftersom heltal inte är föränderliga sekvenser, är ett försök att använda hakparenteser för att teckna resultat i 'Int'-objektet inte ett teckningsfel.
Python3
# Example triggering 'Int' object is not subscriptable error> num>=> 42> value>=> num[>0>]># Error: 'Int' object is not subscriptable> |
>
>
Produktion:
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>
Funktion Return Typ Missmatch
I den här funktionen förväntas returnera en lista eller tupel när villkoret är False, vilket indikeras av elsegrenen.
Men i den andra grenen returnerar funktionen ett heltal istället för en lista eller tupel vilket resulterar i felet 'Int' Object Is Not Subscriptable
Python3
turbo c++ ladda ner
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>]> |
>
>
Produktion:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 15, in first_element = result[0] TypeError: 'int' object is not subscriptable>
Ingen itererbar struktur
Som vi vet saknar heltal den itererbara struktur som krävs för prenumeration. Itererbara objekt, som listor eller strängar, har en väldefinierad sekvens av element som kan nås med hjälp av index.
Att försöka använda hakparenteser på ett heltal innebär att det behandlas som om det har itererbara egenskaper, vilket resulterar i att 'Int'-objektet inte är ett teckningsfel.
Python3
# Example demonstrating misinterpretation of syntax> integer_value>=> 123> value>=> integer_value[>0>]> |
>
>
Produktion:
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 är inte abonnemang i Python
- Använd strängar eller listor istället för heltal
- Kontrollera Variabeltyper
- Granska kodlogik:
Låt oss studera dem i detalj
Använd strängar eller listor istället för heltal
I Python är subscript notation tillämplig på strängar och listor. Så vi kan konvertera heltal till en sträng eller lista innan vi använder nedsänkt notation.
Python3
# Converting integer to string and using subscript notation> number>=> 42> number_str>=> str>(number)> print>(number_str[>0>])> |
vad är android påskägg
>
>Produktion
4>
Kontrollera Variabeltyper
Vi måste se till att variabeln vi använder är av den förväntade typen vi vill att den ska vara. Om det är tänkt att vara en sekvens (sträng eller lista), se till att den inte av misstag tilldelas ett heltalsvärde.
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.'>)> |
>
>Produktion
Error: Variable type 'int' is not subscriptable.>
Granska kodlogik
Undersök din kodlogik för att avgöra om subscript notation verkligen är nödvändigt. Om inte, revidera koden för att undvika att teckna heltal.
Python3
# Reviewing code logic to avoid subscripting integers> number>=> 42> number_str>=> str>(number)> print>(number_str[>0>])> |
>
>Produktion
4>
Slutsats
Från ovanstående information kan vi säga Skrivfel : 'int'-objekt är inte teckningsbart fel i Python inträffar vanligtvis på grund av en typfel överensstämmelse där ett heltal av misstag behandlas som ett skrivbart objekt som en lista eller tupel. Så för att förhindra detta är det avgörande att konsekvent kontrollera datatyper, särskilt när man hanterar dynamiska eller komplexa datastrukturer.