Articolo originale: TypeError: 'int' object is not subscriptable [Solved Python Error]

L'errore di Python "TypeError: 'int' object is not subscriptable" (TypeError: l'oggetto 'int' non è sottoscrivibile) si verifica quando provi a trattare un numero intero come un oggetto "sottoscrivibile".

In Python, un oggetto "sottoscrivibile" è un oggetto su cui puoi usare l'operatore parentesi quadre [], o su cui puoi iterare.

Perché si Verifica l'Errore "TypeError: 'int' object is not subscriptable Error"

Puoi iterare su una stringa, una lista, una tupla o anche un dizionario. Ma non è possibile iterare su un numero intero o un insieme di numeri.

Quindi, se ottieni questo errore, significa che stai cercando di iterare su un numero intero oppure che stai trattando un numero intero come un array.

Nell'esempio in basso, ho scritto la data di nascita (variabile dob) nel formato ddmmyy. Ho provato a ottenere il mese di nascita ma non ha funzionato. Ha restituito l'errore "TypeError: 'int' object is not subscriptable":

dob = 21031999
mob = dob[2:4]

print(mob)

# Output: Traceback (most recent call last):
#   File "int_not_subable..py", line 2, in <module>
#     mob = dob[2:4]
# TypeError: 'int' object is not subscriptable

Come Risolvere l'Errore "TypeError: 'int' object is not subscriptable"

Per risolvere questo errore, devi convertire il numero intero in un altro tipo di dato che sia iterabile, per esempio, una stringa.

E se stai ottenendo questo errore perché hai convertito qualcosa in un numero intero, allora devi riconvertirlo in ciò che era prima. Per esempio, una stringa, una tupla, una lista, e così via.

Per quanto riguarda il codice che ci ha restituito l'errore in alto, sono stato in grado di farlo funzionare convertendo la variabile dob in una stringa:

dob = "21031999"
mob = dob[2:4]

print(mob)

# Output: 03

Se stai ottenendo l'errore dopo aver convertito qualcosa in un numero intero, significa che devi riconvertirlo in una stringa e lasciarlo così com'è.

Nell'esempio in basso, ho scritto un programma di Python che stampa la data di nascita nel formato ddmmyy. Ma restituisce un errore:

name = input("Come ti chiami? ")
dob = int(input("Qual è la tua data di nascita nel formato ddmmyy? "))
dd = dob[0:2]
mm = dob[2:4]
yy = dob[4:]
print(f"Ciao, {name}, \nIl tuo giorno di nascita è {dd} \nIl mese di nascita è {mm} \nE l'anno di nascita è {yy}.")

#Output: Come ti chiami? John Doe
# Qual è la tua data di nascita nel formato ddmmyy? 01011970
# Traceback (most recent call last):
#   File "int_not_subable.py", line 12, in <module>
#     dd = dob[0:2]
# TypeError: 'int' object is not subscriptable

Scorrendo il codice, ho ricordato che l'input restituisce una stringa, quindi non devo convertire la data di nascita inserita dall'utente in un numero intero. Questo risolve l'errore:

name = input("Come ti chiami? ")
dob = input("Qual è la tua data di nascita nel formato ddmmyy? ")
dd = dob[0:2]
mm = dob[2:4]
yy = dob[4:]
print(f"Ciao, {name}, \nIl tuo giorno di nascita è {dd} \nIl mese di nascita è {mm} \nE l'anno di nascita è {yy}.")

#Output: Come ti chiami? John Doe
# Qual è la tua data di nascita nel formato ddmmyy? 01011970
# Ciao, John Doe,
# Il tuo giorno di nascita è 01
# Il mese di nascita è 01
# E l'anno di nascita è 1970.

Conclusione

In questo articolo, hai imparato che cosa causa l'errore "TypeError: 'int' object is not subscriptable" in Python e come risolverlo.

Se stai ottenendo questo errore, significa che stai trattando un numero intero come un tipo di dato iterabile. I numeri interi non sono iterabili, quindi devi usare un tipo di dato differente o convertire il numero intero in un tipo di dato iterabile.

E se questo errore si verifica perché hai convertito qualcosa in un numero intero, allora devi riconvertirlo in un tipo di dato iterabile.

Grazie per aver letto.