12 April 2014: The OpenOffice Wiki is not, and never was, affected by the heartbleed bug. Users' passwords are safe and wiki users do not need take any actions.

Gestione degli errori

From Apache OpenOffice Wiki
Jump to: navigation, search

Template:EN/Documentation/BASICGuideTOC/v2


La corretta gestione delle situazioni di errore è una delle attività di programmazione che richiede più tempo. OpenOffice.org Basic fornisce un'ampia gamma di strumenti per semplificare la gestione degli errori.

L'istruzione On Error

L'istruzione On Error è fondamentale per la gestione degli errori:

Sub Test
  On Error Goto ErrorHandler
  ' ... undertake task during which an error may occur
  Exit Sub
  ErrorHandler: 
    ' ... individual code for error handling
End Sub

La riga On Error Goto ErrorHandler definisce il modo in cui OpenOffice.org Basic procede in caso di errori. L'istruzione Goto ErrorHandler verifica che OpenOffice.org Basic esca dalla riga di programma corrente, quindi esegue il codice ErrorHandler:.

Il comando Resume

Il comando Resume Next fa proseguire il programma dalla riga seguente al punto in cui si è verificato l'errore nel programma, dopo l'esecuzione del codice nel gestore di errori:

ErrorHandler:
  ' ... individual code for error handling
  Resume Next

Usate il comando Resume Proceed per specificare il punto in cui far proseguire il programma dopo la gestione dell'errore:

ErrorHandler:
  ' ... individual code for error handling
  Resume Proceed
 
Proceed:
  ' ... the program continues here after the error

Per far proseguire un programma senza un messaggio di errore quando si verifica un errore, utilizzate il formato seguente:

Sub Test
  On Error Resume Next
  ' ... perform task during which an error may occur
End Sub

Utilizzate il comando On Error Resume Next con cautela, perché ha un effetto globale.

Ricerche riguardanti informazioni sugli errori

Nella gestione degli errori, è utile disporre di una descrizione dell'errore e sapere dove e perché si è verificato:

  • La variabile Err contiene il numero di errori verificatisi.
  • La variabile Error$ contiene una descrizione dell'errore.
  • La variabile Erl contiene il numero della riga in cui si è verificato l'errore.

La chiamata

 MsgBox "Error " & Err & ": " & Error$ & " (line : " & Erl & ")"

mostra come l'informazione sull'errore può essere visualizzata in una finestra di messaggio.

Documentation note.png Mentre VBA riassume i messaggi di errore in un oggetto statistico denominato Err, OpenOffice.org Basic fornisce le variabili Err, Error$ e Erl.

Le informazioni di stato rimangono valide finché il programma non incontra un comando Resume o On Error, quindi l'informazione viene ripristinata.

Documentation note.png In VBA, il metodo Err.Clear dell'oggetto Err ripristina lo stato di errore dopo che si è verificato un errore. In OpenOffice.org Basic, questa operazione viene espletata con i comandi On Error o Resume.

Suggerimenti per la gestione strutturata degli errori

Sia il comando di definizione, On Error che il comando Resume sono varianti del costrutto Goto.

Per strutturare chiaramente il codice in modo da impedire la generazione di errori quando si utilizza questo costrutto, evitate l'uso di comandi di salto senza monitorarli.

Utilizzate il comando On Error Resume Next con cautela, perché chiude tutti i messaggi di errore aperti.

La soluzione migliore è adottare un unico approccio di gestione degli errori all'interno del programma: tenere la gestione degli errori separata dal codice effettivo del programma e non tornare al codice originale dopo che si è verificato l'errore.

Il seguente è un esempio di un errore della procedura di gestione:

Sub Example
  ' Define error handler at the start of the function 
  On Error Goto ErrorHandler   
    ' ... Here is the actual program code
  On Error Goto 0           ' Deactivate error handling
    ' End of regular program implementation
  Exit Sub
 
 ' Start point of error handling
 ErrorHandler:                
   ' Check whether error was expected
    If Err = ExpectedErrorNo Then   
      ' ... Process error
    Else
      ' ... Warning of unexpected error
    End If
 On Error Goto 0            ' Deactivate error handling 
End Sub

Questa procedura inizia con la definizione di un gestore di errori, seguito dal codice effettivo del programma. Alla fine del codice del programma, la gestione degli errori è disattivata dalla chiamata On Error Goto 0 e l'implementazione della procedura è terminata dal comando Exit Sub(da non confondersi con End Sub).

L'esempio controlla prima se il numero di errore corrisponde al numero previsto (memorizzato nella costante immaginaria ExpectedErrorNo) e quindi gestisce l'errore di conseguenza. Se si verifica un altro errore, il sistema emette un'avvertenza. È importante controllare il numero di errore in modo da poter rilevare gli errori imprevisti.

La chiamata On Error Goto 0 alla fine del codice ripristina le informazioni di stato dell'errore (il codice di errore nelle variabili di sistema Err) in modo che possiate riconoscere con chiarezza un errore verificatosi in data successiva.

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools