In questo articolo studieremo come correggere l'oggetto 'int' che non è indicizzabile in Python. Ma prima cerchiamo di capire perché si verifica e cosa significa.
Cos'è l'errore 'Int' non sottoscrivibile?
L'errore L'oggetto 'int' non è indicizzabile si verifica quando si tenta di utilizzare l'indicizzazione o l'affettatura su un file numero intero , un tipo di dati che non supporta queste operazioni.
Come sappiamo intero in Pitone è un tipo di dati che rappresenta un numero intero. A differenza degli elenchi o dei dizionari, gli interi non contengono una sequenza di elementi e pertanto non supportano l'indicizzazione o l'affettamento.
Ad esempio, se x = 42 (un numero intero) e proviamo a fare qualcosa come x[0], è un tentativo di accedere al primo elemento di x come se x fosse un elenco o a tupla . Poiché gli interi non contengono una raccolta di elementi, questa operazione non è valida e si ottiene un TypeError: l'oggetto 'int' non è indicizzabile.
Esempio
Python3
# Example causing 'int' object is not subscriptable error> x>=> 42> # Attempting to use subscript notation on an integer> print>(x[>0>])> |
>
>
Produzione:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 4, in print(number[0]) TypeError: 'int' object is not subscriptable>
Perché si verifica l'errore 'Int' non scrivibile?
L'oggetto 'Int' non è un errore indicizzabile in Python derivante da caratteristiche specifiche degli oggetti interi (int). Ecco i motivi per cui si verifica questo errore:
- Immutabilità degli interi
- Mancata corrispondenza del tipo restituito della funzione
- Nessuna struttura iterabile
Immutabilità degli interi
Come sappiamo, gli interi in Python sono immutabili, il che significa che i loro valori non possono essere modificati dopo la creazione e le operazioni di indicizzazione o indicizzazione sono applicabili a sequenze mutabili (ad esempio, elenchi, stringhe ), dove è possibile accedere o modificare gli elementi utilizzando gli indici.
sistemi operativi mac
Poiché gli interi non sono sequenze mutabili, il tentativo di utilizzare parentesi quadre per indicizzare i risultati nell'oggetto 'Int' non è un errore indicizzabile.
Python3
# Example triggering 'Int' object is not subscriptable error> num>=> 42> value>=> num[>0>]># Error: 'Int' object is not subscriptable> |
>
>
Produzione:
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>
Mancata corrispondenza del tipo restituito della funzione
In questa funzione è previsto che restituisca una lista o una tupla quando la condizione è False, come indicato dal ramo else.
Tuttavia, nel ramo else, la funzione restituisce un numero intero anziché una lista o una tupla che risulta nell'errore 'Int' L'oggetto non è indicizzabile
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>]> |
>
>
Produzione:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 15, in first_element = result[0] TypeError: 'int' object is not subscriptable>
Nessuna struttura iterabile
Come sappiamo, gli interi non hanno la struttura iterabile richiesta per l'indice. Gli oggetti iterabili, come elenchi o stringhe, hanno una sequenza ben definita di elementi a cui è possibile accedere utilizzando gli indici.
Il tentativo di utilizzare parentesi quadre su un numero intero implica trattarlo come se avesse proprietà iterabili, con il risultato che l'oggetto 'Int' non è un errore indicizzabile.
Python3
la stringa Java è vuota
# Example demonstrating misinterpretation of syntax> integer_value>=> 123> value>=> integer_value[>0>]> |
>
>
Produzione:
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>
Risolvi L'oggetto 'Int' non è scrivibile in Python
- Utilizza stringhe o elenchi invece di numeri interi
- Controlla i tipi di variabili
- Rivedi la logica del codice:
Studiamoli in dettaglio
Utilizza stringhe o elenchi invece di numeri interi
In Python, la notazione in pedice è applicabile a stringhe ed elenchi. Quindi possiamo convertire un numero intero in una stringa o in un elenco prima di utilizzare la notazione in pedice.
Python3
# Converting integer to string and using subscript notation> number>=> 42> number_str>=> str>(number)> print>(number_str[>0>])> |
>
>Produzione
4>
Controlla i tipi di variabili
Dobbiamo assicurarci che la variabile che stiamo utilizzando sia del tipo previsto che vogliamo che sia. Se deve essere una sequenza (stringa o elenco), assicurati che non gli venga assegnato erroneamente un valore intero.
Python3
concatenazione di stringhe
# 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.'>)> |
>
>Produzione
Error: Variable type 'int' is not subscriptable.>
Rivedere la logica del codice
Esaminare la logica del codice per determinare se la notazione in pedice è veramente necessaria. In caso contrario, rivedere il codice per evitare di inserire numeri interi in pedice.
Python3
# Reviewing code logic to avoid subscripting integers> number>=> 42> number_str>=> str>(number)> print>(number_str[>0>])> |
>
>Produzione
4>
Conclusione
Dalle informazioni di cui sopra possiamo dire TypeError : L'oggetto 'int' non è un errore con indice in Python in genere si verifica a causa di una mancata corrispondenza del tipo in cui un numero intero viene erroneamente trattato come un oggetto con indice come una lista o una tupla. Pertanto, per evitare ciò, è fondamentale controllare costantemente i tipi di dati, soprattutto quando si ha a che fare con strutture di dati dinamiche o complesse.