Difference between revisions of "Gestione errori"

From SageDev KB
Jump to navigation Jump to search
 
(5 intermediate revisions by 2 users not shown)
Line 5: Line 5:
  
 
<pre>
 
<pre>
TRACE=0
+
Local Integer EXCEPTION # per gestione errori imprevisti
 +
EXCEPTION=0
 
Local Integer VALORE
 
Local Integer VALORE
Onerrgo OPENERR      #inizio blocco Try:imposto delegato per la gestione di un eventuale errore
+
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)
+
VALORE=41/0             #questa operazione va in errore (divisione per zero)
                      #il programma salta su $OPENERR, dove imposta TRACE=1
+
                        #il programma salta su $MANAGE_EXCEPTION , dove imposta EXCEPTION=1
  
     If TRACE=0       #se non ci sono errori
+
     If EXCEPTION=0       #se non ci sono errori
 
       ...
 
       ...
     Else             #se c'è un errore
+
     Else                 #se c'è un errore
 
       ...
 
       ...
 
     Endif
 
     Endif
TRACE=0               #blocco Finally
+
EXCEPTION=0             #blocco Finally
Onerrgo               #azzero il riferimento a programma di gestione errore
+
Onerrgo                 #azzero il riferimento a programma di gestione errore
  
  
$OPENERR
+
$MANAGE_EXCEPTION
 
   #Gestisco errore...
 
   #Gestisco errore...
 
   #Se qui si mette End:
 
   #Se qui si mette End:
Line 26: Line 27:
 
   #- se c'è TRANSAZIONE in corso, questa viene ANNULLATA in automatico
 
   #- se c'è TRANSAZIONE in corso, questa viene ANNULLATA in automatico
 
   Infbox "Errore calcolo: divisione per zero"
 
   Infbox "Errore calcolo: divisione per zero"
   TRACE=1            #blocco Catch
+
   EXCEPTION=1            #blocco Catch
Resume
+
Resume                   #attenzione!! No Return o End: Resume!
 
</pre>
 
</pre>
  
Line 33: Line 34:
 
Vedere l'help per tutte le funzioni correlate (Errn,Errp...)
 
Vedere l'help per tutte le funzioni correlate (Errn,Errp...)
  
 +
Utility comoda per formattare messaggio di errore:
 +
<pre>
 +
######################################################################################
 +
# 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
 +
######################################################################################
 +
</pre>
  
 
== Altro ==
 
== Altro ==

Latest revision as of 22:15, 8 January 2025


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'errore
  • Errl: riga del programma che ha generato l'errore
  • Errn: codice dell'errore
  • ErrMes$: messaggio d'errore
  • Errm: seconda parte del messaggio d'errore