În acest articol, vom studia cum să remediați obiectul „int” care nu este subscriptabil în Python. Dar înainte de asta, să înțelegem de ce apare și ce înseamnă.
Ce este „Int” Object is Not Subscriptable Error?
Eroarea obiectul „int” nu este subscriptabil apare atunci când încercați să utilizați indexarea sau tăierea pe un întreg , un tip de date care nu acceptă aceste operațiuni.
După cum știm întreg în Piton este o tip de date care reprezintă un număr întreg. Spre deosebire de liste sau dicționare, numerele întregi nu dețin o secvență de elemente și, prin urmare, nu acceptă indexarea sau tăierea.
De exemplu, dacă x = 42 (un număr întreg) și încercăm să facem ceva de genul x[0], este o încercare de a accesa primul element al lui x ca și cum x ar fi un listă sau a tuplu . Deoarece numerele întregi nu conțin o colecție de elemente, această operațiune nu este validă și obțineți un TypeError: obiectul „int” nu este subscriptabil.
Exemplu
Python3
# Example causing 'int' object is not subscriptable error> x>=> 42> # Attempting to use subscript notation on an integer> print>(x[>0>])> |
>
>
Ieșire:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 4, in print(number[0]) TypeError: 'int' object is not subscriptable>
De ce apare o eroare „Int” obiectul nu este subscriptabil?
Obiectul „Int” nu este o eroare subscriptabilă în Python apare din cauza caracteristicilor specifice ale obiectelor întregi (int). Iată motivele pentru care apare această eroare:
- Imuabilitatea numerelor întregi
- Funcție returnare tip nepotrivire
- Fără structură iterabilă
Imuabilitatea numerelor întregi
După cum știm că numerele întregi din Python sunt imuabile, ceea ce înseamnă că valorile lor nu pot fi modificate după creare, iar operațiunile de indexare sau indexare sunt aplicabile secvențelor mutabile (de exemplu, liste, siruri de caractere ), unde elementele pot fi accesate sau modificate folosind indici.
Bază de date
Deoarece numerele întregi nu sunt secvențe mutabile, încercarea de a folosi paranteze pătrate pentru subscriptare rezultă în obiectul „Int” nu este o eroare subscriptabilă.
Python3
# Example triggering 'Int' object is not subscriptable error> num>=> 42> value>=> num[>0>]># Error: 'Int' object is not subscriptable> |
>
>
Ieșire:
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>
Funcție returnare tip nepotrivire
În această funcție se așteaptă să returneze o listă sau un tuplu când condiția este False, așa cum este indicat de ramura else.
Cu toate acestea, în ramura else, funcția returnează un număr întreg în loc de o listă sau un tuplu care are ca rezultat o eroare „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>]> |
>
>
Ieșire:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 15, in first_element = result[0] TypeError: 'int' object is not subscriptable>
Fără structură iterabilă
După cum știm, numerelor întregi le lipsește structura iterabilă necesară pentru indice. Obiectele iterabile, cum ar fi listele sau șirurile de caractere, au o secvență bine definită de elemente care pot fi accesate folosind indici.
Încercarea de a folosi paranteze pătrate pe un întreg implică tratarea acestuia ca și cum ar avea proprietăți iterabile, rezultând că obiectul „Int” nu este o eroare subscriptabilă.
Python3
mylivecricket in for live cricket
# Example demonstrating misinterpretation of syntax> integer_value>=> 123> value>=> integer_value[>0>]> |
>
>
Ieșire:
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>
Rezolvarea obiectului „Int” nu este subscriptabil în Python
- Utilizați șiruri de caractere sau liste în loc de numere întregi
- Verificați tipurile de variabile
- Examinați logica codului:
Să le studiem în detaliu
Folosiți șiruri de caractere sau liste în loc de numere întregi
În Python, notația cu indice este aplicabilă șirurilor și listelor. Deci, putem converti un întreg într-un șir sau listă înainte de a folosi notația cu indice.
Python3
# Converting integer to string and using subscript notation> number>=> 42> number_str>=> str>(number)> print>(number_str[>0>])> |
>
>Ieșire
4>
Verificați tipurile de variabile
Trebuie să ne asigurăm că variabila pe care o folosim este de tipul așteptat pe care vrem să fie. Dacă ar trebui să fie o secvență (șir sau listă), asigurați-vă că nu i se atribuie din greșeală o valoare întreagă.
Python3
anul în care a fost inventat computerul
# 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.'>)> |
>
>Ieșire
Error: Variable type 'int' is not subscriptable.>
Examinați logica codului
Examinați-vă logica codului pentru a determina dacă notația în indice este cu adevărat necesară. Dacă nu, revizuiți codul pentru a evita subscriptia numerelor întregi.
Python3
# Reviewing code logic to avoid subscripting integers> number>=> 42> number_str>=> str>(number)> print>(number_str[>0>])> |
>
>Ieșire
4>
Concluzie
Din informațiile de mai sus putem spune Eroare de scris : obiectul „int” nu este subscriptabil. Eroarea în Python se întâmplă de obicei din cauza unei nepotriviri de tip în care un întreg este tratat din greșeală ca un obiect subscriptabil ca o listă sau un tuplu. Deci, pentru a preveni acest lucru, este esențial să verificați în mod constant tipurile de date, în special atunci când aveți de-a face cu structuri de date dinamice sau complexe.