Gestione errori
Jump to navigation
Jump to search
In caso di errori a run time l'esecuzione del processo in Sage si interrompe; per evitare un'interruzione bisogna gestire adeguatamente i possibili errori con l'istruzione Onerrgo e Resume.
Ecco un esempio di come gestire gli errori:
Local Integer EXCEPTION # per gestione errori imprevisti
EXCEPTION=0
Local Integer VALORE
Onerrgo MANAGE_EXCEPTION #inizio blocco Try:imposto delegato per la gestione di un eventuale errore
VALORE=41/0 #questa operazione va in errore (divisione per zero)
#il programma salta su $MANAGE_EXCEPTION , dove imposta EXCEPTION=1
If EXCEPTION=0 #se non ci sono errori
...
Else #se c'è un errore
...
Endif
EXCEPTION=0 #blocco Finally
Onerrgo #azzero il riferimento a programma di gestione errore
$MANAGE_EXCEPTION
#Gestisco errore...
#Se qui si mette End:
# il programma termina
#- se c'è TRANSAZIONE in corso, questa viene ANNULLATA in automatico
Infbox "Errore calcolo: divisione per zero"
EXCEPTION=1 #blocco Catch
Resume #attenzione!! No Return o End: Resume!
Mettendo Resume il programma continua con l'istruzione successiva al punto in cui c'è stato l'errore; mettendo End invece di Resume il programma termina del tutto. Vedere l'help per tutte le funzioni correlate (Errn,Errp...)
Utility comoda per formattare messaggio di errore:
######################################################################################
# Funzione che ritorna un messaggio di errore completo
# di un errore (gestitibile con la chiamata Onerrgo)
# Esempio di chiamata: func YUTILS.GET_TXT_EXCEPTION(errp, errl, errn, errm)
######################################################################################
Funprog GET_TXT_EXCEPTION(P_ERRP, P_ERRL, P_ERRN, P_ERRM)
Value Char P_ERRP() #programma in errore, variabile errp
Value Integer P_ERRL #riga di errore, variabile errl
Value Integer P_ERRN #codice di errore, variabile errn
Value Char P_ERRM() #dettagli di errore, variabile errm
Local Clbfile STRCLB(1)
STRCLB = "" +
& "Programma in errore:" - errp + chr$(10)+ chr$(13) +
& "Riga del programma :" - num$(errl) + chr$(10)+ chr$(13) +
& "Codice errore :" - num$(errn) + chr$(10)+ chr$(13) +
& "Messaggio :" - errmes$(errn) + chr$(10)+ chr$(13) +
& "Dettagli :" - errm + chr$(10)+ chr$(13)
End STRCLB
######################################################################################
Altro[edit]
Errp: programma che ha generato l'erroreErrl: riga del programma che ha generato l'erroreErrn: codice dell'erroreErrMes$: messaggio d'erroreErrm: seconda parte del messaggio d'errore