Vai al contenuto
Leo

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.

  • 3 esempi eseguiti

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.

Leoeseguito con Leo
prova    variabile n = intero("dodici")cattura ErroreValore come e    stampa("Non è un numero: {e.messaggio}")infine    stampa("Controllo finito")fine
Uscita
Non è un numero: Non posso trasformare il testo "dodici" in un intero.
Controllo finito

Lanciare un errore#

Leoeseguito con Leo
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)fine
Uscita
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.

Leoeseguito con Leo
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#

ErroreQuando succede
ErroreSintassiIl codice non rispetta la grammatica. NON catturabile da prova.
ErroreNomeVariabile o funzione non definita (o già dichiarata).
ErroreTipoOperazione tra tipi incompatibili ("3" + 4).
ErroreValoreValore del tipo giusto ma non valido (intero("ciao")).
ErroreIndiceIndice fuori dalla lista/testo.
ErroreChiaveChiave assente nel dizionario.
ErroreDivisioneDivisione (o resto) per zero.
ErroreRicorsioneSuperato il limite di chiamate annidate (1.000).
ErroreFileFile inesistente o non leggibile/scrivibile.