Vai al contenuto
Leo

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.

Risultato
print("ciao")
Risultato
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

Leo
se 3 > 2 allora
    scrivi "si"
Risultato
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

Leo
scrivi("3" + 4)
Risultato
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

Leo
pnuti = 3
Risultato
ErroreNome ...
`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:

Leo
variabile totale = 12
scrivi totale        # stampa la parola: totale
scrivi(totale)       # stampa il valore: 12

scrivi 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»

Leo
variabile l = [1, 2, 3]
scrivi(l[5])
Risultato
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»

Leo
variabile d = {"a": 1}
scrivi(d["b"])
Risultato
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»

Leo
variabile l = [1]
se l allora
    scrivi "x"
fine
Risultato
ErroreTipo ...
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»

Leo
scrivi(5 / 0)
Risultato
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:

  1. Leggi il tipo e la riga. Leo ti dice esattamente dove guardare.
  2. Leggi la spiegazione e il suggerimento. Molto spesso contengono già la soluzione, o persino la riga corretta.
  3. Guarda la riga sopra. Alcuni errori (parentesi, fine) si manifestano una riga dopo la vera causa.
  4. Semplifica. Se non capisci, togli pezzi finché l'errore non sparisce: l'ultimo pezzo tolto era il colpevole.
  5. 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.