Comprendere il sistema di tipi di Python è la chiave per risolvere questo bug complicato.

Stai cercando di recuperare i dati da un oggetto e visualizzi invece un errore "l'oggetto non è indicizzabile"? Il problema è che stai indicizzando il tipo di dati sbagliato.

Scopri tutto sui tipi indicizzabili e su come risolvere questo errore.

Cosa significa "Sottoscrivibile" in Python?

Il termine "subscriptable" in Python indica un tipo di dati che memorizza più valori a cui è possibile accedere individualmente. È possibile accedere a un valore specifico da un tipo di dati indicizzabile tramite il relativo indice, utilizzando la notazione tra parentesi quadre ([]).

Se provi ad accedere agli elementi in un tipo di dati che non è indicizzabile, Python solleva un'eccezione "TypeError: l'oggetto non è indicizzabile".

I seguenti tipi di dati sono indicizzabili in Python: liste, stringhe, tuple e dizionari.

lista_esempio = [1, 3, 5, "Idowu"]
stringa_esempio = "Idowu Omisola"
tupla_esempio = (1, 3, 5, "Idowu")
dict_example = {"nome": "Idowu", "Lingua": "Yoruba"}
instagram viewer

stampa (elenco_esempio[0]) # 1
print (stringa_esempio[3]) # w
print (tupla_esempio[1]) # 3
stampa (dict_example["nome"]) # Idowu

Tuttavia, set, numeri interi, float e booleani sono inaccessibili tramite l'indicizzazione, quindi non sono indicizzabili:

float_example = 12.45
int_esempio = 12367
bool_esempio = VERO
set_esempio = {1, 3, 5, "Pitone"}

print (float_esempio[1])
stampa (bool_esempio[2])
print (int_esempio[2])
stampa (set_esempio[2])

Il tentativo di eseguire ciascuna di queste istruzioni genera l'eccezione "oggetto non indicizzabile":

Risoluzione dell'eccezione

La risoluzione dell'eccezione "l'oggetto non è indicizzabile" è più semplice una volta comprese le regole per l'accesso a ciascun tipo di dati. Quindi avvia il debug di Python controllando il tipo di dati dell'oggetto che stai tentando di indicizzare.

float_example = 12.45
int_esempio = 12367
bool_esempio = VERO
set_esempio = {1, 3, 5, "Pitone"}

print (tipo (float_example)) #
stampa (tipo (int_example)) #
print (tipo (bool_example)) #
print (tipo (set_esempio)) #

Una volta stabilito che il tipo di dati non è indicizzabile, la conversione in un tipo indicizzabile risolve il problema. Questo è utile se i dati provengono da un'API di terze parti. La conversione di tipi di dati come integer, float e boolean in una stringa li rende indicizzabili:

print (str (float_example)[:2]) # 12
stampa (str (int_esempio)[:2]) # 12
print (str (esempio_bool)[:2]) # Tr

Puoi persino manipolare le stringhe Python risultanti come vuoi. Se hai a che fare con numeri interi e float, potresti voler mantenere il tipo di dati originale nell'output. Per fare ciò, converti il ​​valore risultante nel loro tipo di dati originale dopo averli indicizzati come stringhe:

convert_float = float (str (float_example)[:2])
convert_int = int (str (int_example)[:2])

# 12.0 Tipo di dati:
print (convertito_float, f'Tipo di dati:{tipo (converted_float)}')

# 12 Tipo di dati:
print (convertito_int, f'Tipo di dati:{tipo (converted_int)}')

Come per un set, puoi trasformarlo in un elenco. Sebbene sia possibile convertire un oggetto impostato in un elenco utilizzando il file lista (insieme) Python one-liner, questo non preserva le posizioni degli elementi nell'elenco risultante. Per assicurarti di ottenere un elenco con le posizioni degli elementi conservate, usa la funzione lambda di Python in questo modo:

set_esempio = {1, 3, 5, "Pitone"}
convertito = ordinato (set_example, key=lambda x: (èistanza (x, str), x))

stampa (convertito[3]) # Pitone

Padroneggia il debug di Python

Python ha una curva di apprendimento regolare. Ma semplici eccezioni possono scoraggiarti se non sai come affrontarle. Imparare a eseguire il debug del codice e dedicare tempo alla risoluzione dei problemi è molto utile per correggere errori ed eccezioni di codifica Python.