Înțelegerea sistemului de tip Python este cheia pentru rezolvarea acestei erori complicate.

Încercați să preluați date de la un obiect și vedeți în schimb o eroare „obiectul nu poate fi subscriptabil”? Problema este că indexați tipul de date greșit.

Aflați totul despre tipurile subscriptabile și despre cum să rezolvați această eroare.

Ce înseamnă „Subscriptable” în Python?

Termenul „subscriptibil” în Python înseamnă un tip de date care stochează mai multe valori pe care le puteți accesa individual. Puteți accesa o anumită valoare dintr-un tip de date subscriptibil prin indexul acestuia, folosind notația paranteze pătrate ([]).

Dacă încercați să accesați elementele dintr-un tip de date care nu este indexabil, Python generează o excepție „TypeError: object is not subscriptable”.

Următoarele tipuri de date sunt subscriptabile în Python: liste, șiruri, tupluri și dicționare.

list_example = [1, 3, 5, "Idowu"]
string_example = „Idowu Omisola”
exemplu_tuplu = (1, 3, 5, "Idowu")
dict_example = {"Nume": "Idowu", "Limba": "Yoruba"}
instagram viewer

print (example_lista[0]) # 1
print (exemplu_șir[3]) # w
print (exemplu_tuplu[1]) # 3
print (exemplu_dict["Nume"]) # Idowu

Cu toate acestea, seturile, numerele întregi, flotanți și valorile booleene sunt inaccesibile prin indexare, deci nu sunt subscriptabile:

float_example = 12.45
int_example = 12367
bool_example = Adevărat
set_example = {1, 3, 5, "Piton"}

imprimare (float_example[1])
print (bool_example[2])
print (exemplu_int[2])
print (set_example[2])

Încercarea de a rula fiecare dintre aceste instrucțiuni generează excepția „obiectul nu este subscriptabil”:

Rezolvarea excepției

Rezolvarea excepției „obiectul nu este subscriptibil” este mai ușoară odată ce înțelegeți regulile de accesare a fiecărui tip de date. Deci, începeți depanarea Python verificând tipul de date al obiectului pe care încercați să-l indexați.

float_example = 12.45
int_example = 12367
bool_example = Adevărat
set_example = {1, 3, 5, "Piton"}

imprimare (tip (float_example)) #
print (tastați (exemplu_int)) #
imprimare (tip (bool_example)) #
imprimare (tip (set_example)) #

Odată ce determinați că tipul de date nu este subscriptabil, conversia acestuia într-un tip indexabil rezolvă problema. Acest lucru este util dacă datele provin de la un API terță parte. Conversia tipurilor de date, cum ar fi intreg, float și boolean, într-un șir, le face subscriptabile:

imprimare (str (float_example)[:2]) # 12
imprimare (str (int_example)[:2]) # 12
imprimare (str (bool_example)[:2]) # Tr

Poți chiar manipulați șirurile Python rezultate cum vrei tu. Dacă aveți de-a face cu numere întregi și flotante, este posibil să doriți să păstrați tipul de date original în rezultat. Pentru a face acest lucru, convertiți valoarea rezultată în tipul lor original de date după ce le-ați indexat ca șiruri de caractere:

convertit_float = float (str (float_example)[:2])
converted_int = int (str (int_example)[:2])

# 12.0 Tip de date:
print (convertit_float, f'Tipul de date:{type (converted_float)}')

# 12 Tip de date:
print (converted_int, f'Tipul de date:{type (converted_int)}')

Cât despre un set, îl poți transforma într-o listă. Deși puteți converti un obiect setat într-o listă folosind lista (set) Python one-liner, acest lucru nu păstrează pozițiile articolelor din lista rezultată. Pentru a vă asigura că obțineți o listă cu pozițiile elementelor păstrate, utilizați funcția lambda a lui Python astfel:

set_example = {1, 3, 5, "Piton"}
convertit = sortat (set_example, cheie=lambda x: (esteinstanța (x, str), x))

imprimare (convertit[3]) # Python

Master Python Debugging

Python are o curbă de învățare lină. Dar excepțiile simple te pot dezamăgi dacă nu știi cum să le rezolvi. Învățarea să vă depanați codul și să vă dedicați timp pentru rezolvarea problemelor reprezintă un drum lung pentru a remedia erorile și excepțiile de codare Python.