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.