Aiuto con errore Python: 'NoneType' non è iterabile

👤 Iniziato da @teaganesposito
📅 25/06/2025 15:40
📁 Programmazione 🌐 IT
Avatar di teaganesposito
Ciao a tutti, sto cercando di scrivere uno script Python per catalogare la mia collezione di vinili, ma continuo a ricevere l'errore 'TypeError: 'NoneType' object is not iterable'. Il codice dovrebbe leggere un file JSON con i dati dei vinili e stamparli, ma qualcosa non va. Ecco il pezzo di codice incriminato:

```python
import json

def leggi_collezione(file_path):
with open(file_path, 'r') as file:
data = json.load(file)
for vinile in data:
print(vinile['titolo'])

leggi_collezione('collezione.json')
```

Ho controllato il file JSON e sembra corretto, ma l'errore persiste. Qualcuno sa dirmi dove sbaglio? Grazie mille per l'aiuto!
Avatar di taliapellegrini49
L'errore succede perché `data` non è una lista iterabile. Controlla la struttura del JSON: probabilmente hai un dizionario principale invece di un array. Ad esempio, se il file è così:
```json
{
"vinili": [
{"titolo": "Back in Black"},
{"titolo": "Dark Side of the Moon"}
]
}
```
Dev'essere `data["vinili"]` nel ciclo. Altrimenti, se il JSON è vuoto o malformato, `json.load()` ritorna `None`. Prova a stampare `data` prima del loop per verificare. Oh, e assicurati che il file non sia aperto altrove in scrittura. Capita.
Avatar di zoilofontana
Ciao teaganesposito,

Taliapellegrini49 ha centrato il punto. L'errore 'NoneType' object is not iterable' indica quasi sempre che stai cercando di iterare su qualcosa che non è una lista, un tuple o un altro oggetto iterabile, ma su un valore `None`.

Il problema è probabilmente nel file JSON. Se il tuo file ha una struttura del tipo suggerito da talia, allora devi modificare il codice così:

```python
import json

def leggi_collezione(file_path):
with open(file_path, 'r') as file:
data = json.load(file)
for vinile in data['vinili']: # Correzione qui
print(vinile['titolo'])

leggi_collezione('collezione.json')
```

Se anche questo non funziona, prova a stampare `data` subito dopo aver caricato il JSON, così capiamo cosa c'è dentro. Se vedi `None`, allora il problema è nella lettura del file o nel JSON stesso. Assicurati che il file esista, che sia leggibile e che il suo contenuto sia valido. A volte un errore di sintassi nel JSON (una virgola mancante, una parentesi sbagliata) può mandare tutto a monte.
Avatar di teaganesposito
Grazie mille a entrambi per le risposte! @zoilofontana, ho provato il tuo suggerimento e ora funziona! Era proprio un problema nel JSON, mancava una virgola tra due vinili. Ho stampato `data` come hai detto e ho visto subito l'errore. Ora il catalogo gira perfettamente e posso finalmente organizzare la mia collezione senza impazzire. Vi ringrazio davvero, siete stati preziosi!
Avatar di didacobianchi90
Sono felice che tu abbia risolto il problema, @teaganesposito! Capita spesso di incappare in errori del genere quando si lavora con file JSON. Una virgola mancante può fare la differenza! Il mio motto è "carpe diem", quindi sono contento che tu abbia potuto risolvere la questione e ora tu possa goderti la tua collezione di vinili senza stress. Se hai altre domande o hai bisogno di aiuto per migliorare il tuo script Python, non esitare a chiedere. Ora vai a goderti un po' di musica!

La Tua Risposta

💬

Vuoi partecipare alla discussione?

Accedi o registrati per scrivere la tua risposta e unirti alla conversazione!