Appendici
Appendice B — Errori comuni e come risolverli
Gli errori di Leo sono fatti per essere letti: dicono dove, cosa e spesso come rimediare. Questa appendice raccoglie quelli in cui inciampano tutti, all'inizio, con il messaggio reale e la soluzione. Imparali: ti faranno risparmiare ore.
«print non è definito» — il riflesso di un altro linguaggio
print("ciao")ErroreNome alla riga 1, colonna 1 di programma.leo
1 | print("ciao")
| ^^^^^
`print` non è definito.
Suggerimento: In Leo si scrive `stampa`.
Riga corretta proposta:
1 | stampa("ciao")Leo riconosce le parole degli altri linguaggi e ti indica la traduzione. Vale per print → stampa, if → se, for → per ogni, def → funzione, e molte altre. Soluzione: usa la parola italiana (qui stampa o scrivi).
«manca fine» — un blocco non chiuso
se 3 > 2 allora
scrivi "si"ErroreSintassi ...
Il blocco `se` aperto alla riga 1 non è mai chiuso: manca `fine`.
Suggerimento: Ogni blocco si chiude con `fine`.Ogni se, mentre, per ogni, funzione, classe, prova va chiuso con fine. Soluzione: aggiungi il fine mancante. Un trucco: rientra sempre il codice di quattro spazi, così i blocchi aperti si vedono a colpo d'occhio.
«non si può unire un testo e un numero» — tipi non mescolati
scrivi("3" + 4)ErroreTipo ...
Con `+` non si può unire un testo e un numero (`4`).
Suggerimento: Metti il valore dentro il testo tra graffe, `{4}`: `scrivi("3{4}")`.Leo non converte i tipi di nascosto. Soluzione: usa l'interpolazione ("3{4}") oppure converti a mano ("3" + testo(4)). È la stessa idea vista nel Capitolo 4.
«una variabile nuova si crea con variabile» — il refuso protetto
pnuti = 3ErroreNome ...
`pnuti` non esiste ancora: una variabile nuova si crea con `variabile`.Assegnare a un nome mai dichiarato è un errore apposta: così un refuso non crea di nascosto una variabile sbagliata. Soluzione: se è una variabile nuova, scrivi variabile pnuti = 3; se volevi punti, correggi il nome.
«stampa la parola invece del valore» — le parentesi che calcolano
Questo non dà errore, e proprio per questo inganna:
variabile totale = 12
scrivi totale # stampa la parola: totale
scrivi(totale) # stampa il valore: 12scrivi senza parentesi tratta ciò che segue come testo letterale. Soluzione: usa le parentesi scrivi(totale) o l'interpolazione scrivi "Il totale è {totale}".
«indice fuori dalla lista»
variabile l = [1, 2, 3]
scrivi(l[5])ErroreIndice ...
L'indice 5 è fuori dalla lista: gli indici vanno da 0 a 2.Gli indici partono da 0, quindi una lista di 3 elementi ha indici 0, 1, 2. Soluzione: controlla con lunghezza(l) prima di indicizzare, o usa un indice valido. Ricorda che le fette (l[0..100]) invece non danno errore: si accostano ai limiti.
«la chiave non è nel dizionario»
variabile d = {"a": 1}
scrivi(d["b"])ErroreChiave ...
La chiave "b" non è nel dizionario.
Suggerimento: Usa `.prendi(chiave, predefinito)` o controlla con `.ha(chiave)`.Soluzione: usa d.prendi("b", valore_di_riserva) quando la chiave potrebbe mancare, oppure controlla con d.ha("b").
«la condizione deve essere vero o falso»
variabile l = [1]
se l allora
scrivi "x"
fineErroreTipo ...
La condizione di `se` deve essere `vero` o `falso`, non un valore di tipo `lista`.
Suggerimento: Per controllare se non è vuoto scrivi `se non vuota(...)`.In se e mentre Leo vuole una condizione vera o falsa, non «qualcosa che assomiglia al vero». Soluzione: scrivi se non vuota(l) per «se la lista non è vuota».
«divisione per zero»
scrivi(5 / 0)ErroreDivisione ...
Divisione per zero.Soluzione: controlla che il divisore non sia zero prima di dividere, oppure racchiudi l'operazione in un prova/cattura ErroreDivisione.
Una strategia generale
Quando incontri un errore che non capisci:
- Leggi il tipo e la riga. Leo ti dice esattamente dove guardare.
- Leggi la spiegazione e il suggerimento. Molto spesso contengono già la soluzione, o persino la riga corretta.
- Guarda la riga sopra. Alcuni errori (parentesi,
fine) si manifestano una riga dopo la vera causa. - Semplifica. Se non capisci, togli pezzi finché l'errore non sparisce: l'ultimo pezzo tolto era il colpevole.
- Prova in piccolo. Apri il REPL (
leo) e ricrea il problema in una riga.
Gli strumenti leo controlla (controlli statici senza eseguire) e leo formatta (riscrive nella forma canonica) sono due alleati preziosi per scovare i problemi prima ancora di lanciare il programma.