Correzione dell'oggetto 'Int' che non è scrivibile in Python
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.
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
# 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
# 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.