Programmi robusti
Errori: prova, cattura, lancia
Gestire gli errori senza fermare il programma: prova, cattura, infine, lancia, i tipi di errore di Leo e il messaggio con la riga corretta proposta.
prova e cattura#
Il codice che potrebbe dare errore va in prova; se succede un errore, Leo esegue il blocco cattura. infine si esegue in tutti e due i casi.
prova variabile n = intero("dodici")cattura ErroreValore come e stampa("Non è un numero: {e.messaggio}")infine stampa("Controllo finito")fineUscita
Non è un numero: Non posso trasformare il testo "dodici" in un intero. Controllo finito
Lanciare un errore#
funzione preleva(saldo, cifra) se cifra > saldo allora lancia ErroreValore("Saldo insufficiente: mancano {cifra - saldo} euro") fine restituisci saldo - cifrafine prova stampa(preleva(50, 80))cattura come e stampa(e.messaggio)fineUscita
Saldo insufficiente: mancano 30 euro
I messaggi di Leo#
Un errore non catturato ferma il programma con un messaggio in italiano: il tipo, la riga e la colonna, il punto esatto, una spiegazione e, quando è sicura, la riga corretta.
variabile nome = "Ada"stampa(nme)Messaggio di Leo
ErroreNome alla riga 2, colonna 8 di esempio.leo 2 | stampa(nme) | ^^^ `nme` non è definito. Suggerimento: forse intendevi `nome` (definito alla riga 1)? Riga corretta proposta: 2 | stampa(nome)
I tipi di errore#
| Errore | Quando succede |
|---|---|
ErroreSintassi | Il codice non rispetta la grammatica. NON catturabile da prova. |
ErroreNome | Variabile o funzione non definita (o già dichiarata). |
ErroreTipo | Operazione tra tipi incompatibili ("3" + 4). |
ErroreValore | Valore del tipo giusto ma non valido (intero("ciao")). |
ErroreIndice | Indice fuori dalla lista/testo. |
ErroreChiave | Chiave assente nel dizionario. |
ErroreDivisione | Divisione (o resto) per zero. |
ErroreRicorsione | Superato il limite di chiamate annidate (1.000). |
ErroreFile | File inesistente o non leggibile/scrivibile. |