logo

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.

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.