Labojiet, ka objekts “Int” nav abonējams programmā Python

Šajā rakstā mēs pētīsim, kā labot “int” objektu, kas nav abonējams programmā Python. Bet pirms tam ļaujiet mums saprast, kāpēc tas notiek un ko tas nozīmē.

Kas ir “Int” objekta kļūda, kuru nevar abonēt?

Kļūda Objekts “int” nav parakstāms rodas, mēģinot izmantot indeksēšanu vai sadalīšanu vesels skaitlis , datu tips, kas neatbalsta šīs darbības.

Kā mēs zinām vesels skaitlis in Python ir datu tips kas apzīmē veselu skaitli. Atšķirībā no sarakstiem vai vārdnīcām, veselos skaitļos nav elementu secības, un tāpēc tie neatbalsta indeksēšanu vai sadalīšanu.
Piemēram, ja x = 42 (vesels skaitlis), un mēs cenšamies darīt kaut ko līdzīgu x[0], tas ir mēģinājums piekļūt pirmajam x elementam tā, it kā x būtu sarakstu vai a korts . Tā kā veseli skaitļi nesatur vienumu kolekciju, šī darbība nav derīga un tiek parādīts TypeError: objekts “int” nav abonējams.

Piemērs

Python3




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

Izvade:

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

Kāpēc rodas kļūda “Int” objektam, kuru nevar abonēt?

Objekts “Int” nav abonējams Python kļūda rodas veselu skaitļu (int) objektu specifisku īpašību dēļ. Tālāk ir norādīti šīs kļūdas iemesli.

  • Veselu skaitļu nemainīgums
  • Funkciju atgriešanas veida neatbilstība
  • Nav atkārtojamas struktūras

Veselu skaitļu nemainīgums

Kā zināms, Python veseli skaitļi ir nemainīgi, kas nozīmē, ka to vērtības nevar mainīt pēc izveides, un abonēšanas vai indeksēšanas darbības ir piemērojamas mainīgām sekvencēm (piemēram, sarakstiem, stīgas ), kur elementiem var piekļūt vai tos mainīt, izmantojot indeksus.

Tā kā veseli skaitļi nav maināmas secības, mēģinājums izmantot kvadrātiekavas rezultātu parakstīšanai objektā “Int” nav parakstāma kļūda.

Python3




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

Izvade:

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 

Funkciju atgriešanas veida neatbilstība

Šajā funkcijā ir paredzēts atgriezt sarakstu vai virkni, ja nosacījums ir False, kā norādīts zarā else.

Tomēr citā filiālē funkcija atgriež veselu skaitli, nevis sarakstu vai virkni, kā rezultātā rodas kļūda “Int” objekts nav abonējams.

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

Izvade:

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

Nav atkārtojamas struktūras

Kā mēs zinām, veseliem skaitļiem trūkst iterējamās struktūras, kas nepieciešama abonēšanai. Atkārtojamiem objektiem, piemēram, sarakstiem vai virknēm, ir skaidri noteikta elementu secība, kurai var piekļūt, izmantojot indeksus.

Mēģinot izmantot kvadrātiekavas veselam skaitlim, tas nozīmē, ka tam ir iterējamas īpašības, kā rezultātā objekts “Int” nav parakstāma kļūda.

Python3




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

Izvade:

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 

Atrisiniet “Int” objektu Python nevar abonēt

  • Veselu skaitļu vietā izmantojiet virknes vai sarakstus
  • Pārbaudiet mainīgo tipus
  • Pārskatiet koda loģiku:

Izpētīsim tos sīkāk

Veselu skaitļu vietā izmantojiet virknes vai sarakstus

Programmā Python apakšrakstu apzīmējumi ir piemērojami virknēm un sarakstiem. Tātad mēs varam pārvērst veselu skaitli par virkni vai sarakstu, pirms tiek izmantots apakšindeksa apzīmējums.

Python3




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

Izvade

4 

Pārbaudiet mainīgo tipus

Mums ir jāpārliecinās, ka izmantojamais mainīgais ir tāda veida, kādu mēs to vēlamies. Ja tai ir jābūt secībai (virknei vai sarakstam), pārliecinieties, vai tai nav kļūdaini piešķirta vesela skaitļa vērtība.

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

Izvade

Error: Variable type 'int' is not subscriptable. 

Pārskatiet Code Logic

Pārbaudiet savu koda loģiku, lai noteiktu, vai paraksta apzīmējums ir patiešām nepieciešams. Ja nē, pārskatiet kodu, lai izvairītos no veselu skaitļu parakstīšanas.

Python3




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

Izvade

4 

Secinājums

No iepriekš minētās informācijas mēs varam teikt Tipa kļūda : “int” objekts nav parakstāms, Python kļūda parasti notiek veida neatbilstības dēļ, kad vesels skaitlis tiek kļūdaini uzskatīts par subscriptējamu objektu, piemēram, sarakstu vai korteži. Tāpēc, lai to novērstu, ir ļoti svarīgi konsekventi pārbaudīt datu tipus, jo īpaši, strādājot ar dinamiskām vai sarežģītām datu struktūrām.