Articolo originale: Int Object is Not Iterable – Python Error [Solved]

Se stai eseguendo il tuo codice Python e vedi l'errore “TypeError: 'int' object is not iterable” (TypeError: l'oggetto 'int' non è iterabile), significa che stai cercando di iterare su un numero intero o un altro tipo di dato con cui i loop non funzionano.

In Python, i tipi di dato iterabili sono le liste, le tuple, i set, i dizionari e così via.

Inoltre, il fatto che questo errore sia un “TypeError” significa che stai cercando di eseguire un'operazione su un tipo di dato non appropriato. Per esempio, aggiungere una stringa a un numero intero.

Oggi sarà l'ultimo giorno in cui incorrerai in questo errore mentre esegui il tuo codice di Python, perché in questo articolo non solo ti mostrerò come puoi risolverlo, ma ti spiegherò anche come cercare il metodo magico __iter__, così potrai vedere se un oggetto è iterabile.

Come Risolvere l'Errore "Int Object is Not Iterable"

Se stai cercando di iterare su un numero intero, otterrai questo errore:

count = 14

for i in count:
    print(i)
# Output: TypeError: 'int' object is not iterable

Un modo per risolverlo è passare la variabile alla funzione range() .

In Python, la funzione range controlla la variabile che le viene passata e restituisce una serie di numeri che inizia da 0 e si ferma al numero precedente a quello specificato.

Adesso il loop funzionerà:

count = 14

for i in range(count):
    print(i)
    
# Output: 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
# 11
# 12
# 13

Un altro esempio che utilizza questa soluzione è nel codice qui in basso:

età = int(input("Inserisci la tua età: "))

for num in range(età):
    print(num)

# Output: 
# Inserisci la tua età: 6
# 0
# 1
# 2
# 3
# 4
# 5

Come Verificare se un Dato o un Oggetto è Iterabile

Per verificare se dei dati specifici sono iterabili, puoi usare il metodo dir(). Se vedi il metodo magico __iter__, allora i dati sono iterabili. In caso contrario, non lo sono e non vale la pena provare a iterare su di essi.

perfectNum = 7

print(dir(perfectNum))

# Output:['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', 
# '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

Il metodo magico __iter__ non si trova nell'output, quindi la variabile perfectNum non è iterabile.

jerseyNums = [43, 10, 7, 6, 8]

print(dir(jerseyNums))

# Output: ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

Il metodo magico __iter__ è stato trovato, quindi la lista jerseyNums è iterabile.

Conclusione

In questo articolo, hai imparato cos'è l'errore "Int Object is Not Iterable" e come risolverlo.

Hai anche potuto vedere che è possibile controllare se un oggetto o un dato sono iterabili oppure no.

Se cerchi il metodo magico __iter__ in alcuni dati e non lo trovi, è meglio non provare proprio a iterare, giacché non sono iterabili.

Grazie per aver letto.