Share via


Istruzione Try...Catch...Finally (Visual Basic)

Aggiornamento: novembre 2007

Consente di gestire alcuni o tutti i possibili errori che possono verificarsi in un determinato blocco di codice in esecuzione.

Try
    [ tryStatements ]
    [ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
    [ catchStatements ]
    [ Exit Try ] ]
[ Catch ... ]
[ Finally
    [ finallyStatements ] ]
End Try

Parti

  • tryStatements
    Facoltativo. Una o più istruzioni in cui può verificarsi un errore. Può trattarsi di un'istruzione composta.

  • Catch
    Facoltativo. Sono ammessi più blocchi Catch. Se durante l'elaborazione del blocco Try si verifica un'eccezione, ogni istruzione Catch viene esaminata in ordine testuale per stabilire se gestisce l'eccezione. L'eccezione generata è rappresentata da exception.

  • exception
    Facoltativo. Qualsiasi nome di variabile. Il valore iniziale di exception corrisponde al valore dell'errore generato. Viene utilizzata con Catch per specificare l'errore intercettato. Se omessa, l'istruzione Catch genera un'eccezione.

  • type
    Facoltativo. Consente di specificare il tipo di classe filtrato. Se il valore di exception è del tipo specificato da type o di un tipo derivato da questo, l'identificatore viene associato all'oggetto eccezione.

  • When
    Facoltativo. Un'istruzione Catch con una clausola When intercetta eccezioni solo quando expression restituisce True. Una clausola When viene applicata soltanto dopo il controllo del tipo di eccezione; expression può fare riferimento all'identificatore che indica l'eccezione.

  • expression
    Facoltativo. Deve essere convertibile in modo implicito in un valore di tipo Boolean. Qualsiasi espressione in cui è descritto un filtro generico. Utilizzato in genere per filtrare in base al numero di errore. Viene utilizzato con la parola chiave When per specificare le circostanze in cui è stato intercettato l'errore.

  • catchStatements
    Facoltativo. Una o più istruzioni per la gestione degli errori verificatisi nel blocco Try associato. Può trattarsi di un'istruzione composta.

  • Exit Try
    Facoltativo. Parola chiave con cui viene interrotta la struttura Try...Catch...Finally. L'esecuzione riprende con il codice immediatamente successivo all'istruzione End Try. Verrà eseguita l'istruzione Finally. Non ammessa nei blocchi Finally.

  • Finally
    Facoltativo. Blocco Finally che viene eseguito tutte le volte che l'esecuzione abbandona l'istruzione Try in un punto qualsiasi.

  • finallyStatements
    Facoltativo. Una o più istruzioni eseguite dopo l'elaborazione di tutti gli altri errori.

  • End Try
    Consente di terminare la struttura Try...Catch...Finally.

Note

Le variabili locali di un blocco Try non sono disponibili in un blocco Catch in quanto rappresentano blocchi separati. Se si desidera utilizzare una variabile in più blocchi, dichiarare la variabile al di fuori della struttura Try...Catch...Finally.

Il blocco Try contiene il codice in cui potrebbe verificarsi un errore, mentre il blocco Catch contiene il codice per la gestione di ogni errore che si verifica. In caso di errore nel blocco Try, il controllo del programma viene passato all'istruzione Catch appropriata per l'elaborazione. L'argomento exception è un'istanza della classe Exception o una classe che deriva dalla classe Exception. L'istanza della classe Exception corrisponde all'errore verificatosi nel blocco Try. L'istanza contiene informazioni sull'errore, inclusi, tra l'altro, numero e messaggio.

Se un'istruzione Catch non specifica un argomento exception, genera eccezioni di sistema o dell'applicazione di qualsiasi tipo. È necessario utilizzare sempre questa variazione come ultimo blocco Catch nella struttura Try...Catch...Finally, una volta generate tutte le eccezioni specifiche anticipate. Il flusso di controllo non può mai raggiungere un blocco Catch che segue un blocco Catch senza un argomento exception.

Nelle situazioni di attendibilità parziale, ad esempio un'applicazione ospitata in una condivisione di rete, la struttura Try...Catch...Finally non intercetta le eccezioni di sicurezza che si verificano prima che venga richiamato il metodo contenente la chiamata. Nell'esempio riportato di seguito, se l'istruzione viene inserita su una condivisione server ed eseguita da tale posizione, verrà generato l'errore "System.Security.SecurityException: Richiesta non riuscita". Per ulteriori informazioni sulle eccezioni di sicurezza, vedere la classe SecurityException.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
    Try
        Process.Start("https://www.microsoft.com")
    Catch ex As Exception
        MsgBox("Can't load Web page" & vbCrLf & ex.Message)
    End Try
End Sub

In una situazione di attendibilità parziale di questo tipo, è necessario inserire l'istruzione Process.Start in un'istruzione Sub separata. La chiamata iniziale a Sub avrà esito negativo. In questo modo, l'istruzione Try...Catch potrà intercettarlo prima che venga avviato l'oggetto Sub contenente Process.Start e prodotta l'eccezione di sicurezza.

Nota:

Se un'istruzione Try non contiene almeno un blocco Catch, deve contenere un blocco Finally.

Esempio

Nell'esempio semplificato riportato di seguito viene illustrata la struttura dell'istruzione Try...Catch...Finally.

Public Sub TryExample()
    Dim x As Integer = 5   ' Declare variables.
    Dim y As Integer = 0
    Try                    ' Set up structured error handling.
        x = x \ y          ' Cause a "Divide by Zero" error.
    Catch ex As Exception When y = 0        ' Catch the error.
        Beep()
        MsgBox("You tried to divide by 0.") ' Show an explanatory message.
    Finally
        Beep()             ' This line is executed no matter what.
    End Try
End Sub

Vedere anche

Riferimenti

Istruzione End

Oggetto Err (Visual Basic)

Istruzione Exit (Visual Basic)

Istruzione On Error (Visual Basic)

Exception

Istruzione GoTo