Gestione delle eccezioni in VB.Net (Try Catch)

โšก Riepilogo intelligente

La gestione delle eccezioni in VB.Net gestisce gli errori di runtime, come la divisione per zero, utilizzando le parole chiave Try, Catch, Finally e Throw, in modo che un programma possa rispondere ai problemi in modo elegante anzichรฉ bloccarsi durante l'esecuzione.

  • ๐Ÿ” eccezione: Un problema che si presenta durante l'esecuzione, ad esempio la divisione di un numero per zero.
  • ๐Ÿ›ก๏ธ Prova a prendere: Il blocco Try incapsula il codice rischioso; il blocco Catch gestisce l'eccezione che esso genera.
  • โœ… Infine: Il blocco Finally viene eseguito indipendentemente dal fatto che si verifichi o meno un'eccezione.
  • ๐Ÿšฆ Gettare: L'opzione Throw genera un oggetto eccezione derivato dalla classe System.Exception.
  • ๐Ÿงฉ Eccezioni personalizzate: Eredita da ApplicationException per definire i tuoi tipi di eccezione personalizzati.
  • ๐Ÿค– Aiuto tramite intelligenza artificiale: GitHub Copilot e IntelliCode Genera blocchi Try Catch mentre digiti.

Gestione delle eccezioni in VB.Net

Cos'รจ un'eccezione in VB.Net?

An Eccezione in VB.Net si riferisce a un problema che si verifica durante l'esecuzione del programma. รˆ causato da una circostanza inaspettata. Un buon esempio รจ quando si esegue un'operazione di divisione e poi si divide per zero (0). Verrร  sollevata un'eccezione.

Cos'รจ la gestione delle eccezioni in VB.Net?

Con eccezioni in VB.Net, puoi trasferire il controllo di un programma da una parte all'altra. In VB.Net, le eccezioni vengono gestite utilizzando le seguenti 4 parole chiave:

Parola chiave Eccezionale
STIMA SMART DI Il compito del blocco Try รจ identificare il blocco di codice per il quale verrร  attivata un'eccezione specifica. Dovrebbe essere seguito da uno o piรน blocchi catch.
lotta La cattura dell'eccezione viene eseguita in questo blocco. รˆ un gestore di eccezioni in cui viene gestita l'eccezione.
Infine Utilizzare il blocco Finalmente per eseguire una serie di istruzioni indipendentemente dal fatto che si sia verificata un'eccezione o meno.
Buttare Viene generata un'eccezione dopo che si รจ verificato un problema. Questo รจ il lavoro della parola chiave Throw.

Ora che il ruolo di queste quattro parole chiave รจ chiaro, consideriamo come si combinano all'interno di un'unica frase.

Sintassi di Try Catch in VB.Net

Le istruzioni Try Catch in VB.Net sono definite utilizzando la sintassi seguente:

Try
   [ try_Statement(s) ]
   [ Exit Try ]
[ Catch [ exception_name [ As type ] ] [ When expression ]
   [ catch_Statement(s) ]
   [ Exit Try ] ]
[ Catch ... ]
[ Finally
   [ finally_Statement(s) ] ]
End Try

Il blocco Try/Catch dovrebbe racchiudere il codice che potrebbe sollevare un'eccezione. Questo codice รจ noto come codice protetto. รˆ possibile utilizzare piรน istruzioni catch quando รจ necessario acquisire vari tipi di eccezioni.

Esempio di gestione delle eccezioni in VB.Net con Try Catch e Finalmente

Con le istruzioni Try/Catch, รจ possibile separare il codice del programma dal sistema di gestione degli errori. Vediamo come gestire un'eccezione utilizzando le parole chiave Try, Catch e Finally.

Passo 1) Creare una nuova applicazione console.

Passo 2) Usa questo codice:

Module Module1
    Sub divisionFunction(ByVal n1 As Integer, ByVal n2 As Integer)
        Dim answer As Integer
        Try
            answer = n1 \ n2
        Catch ex As DivideByZeroException
            Console.WriteLine("Exception: {0}", ex)
        Finally
            Console.WriteLine("Answer is: {0}", answer)
        End Try
    End Sub
    Sub Main()
        divisionFunction(4, 0)
        Console.ReadKey()
    End Sub

End Module

Passo 3) Fai clic sul pulsante Start dalla barra degli strumenti per eseguire il codice. Dovresti ottenere il seguente output:

Output della console di VB.Net Try Catch Finally che mostra l'eccezione DivideByZeroException catturata

Ecco uno screenshot del codice:

Esempio di codice Try Catch Finally in VB.Net visualizzato in Visual Studio

Spiegazione di Code:

  1. Creazione di un modulo denominato Modulo1.
  2. Creazione di una sottoprocedura denominata divisionFunction con due argomenti interi n1 e n2. ByVal รจ una parola chiave VB.Net che indica che i valori degli argomenti verranno passati per valore.
  3. Creazione di una variabile intera denominata risposta.
  4. Inizio del blocco Try/Catch. Dobbiamo racchiudere il codice che sospettiamo possa sollevare un'eccezione con questo blocco.
  5. Esecuzione di un'operazione di divisione tra i valori delle variabili n1 e n2. Il risultato dell'operazione di divisione viene assegnato alla variabile risposta. Questo codice puรฒ sollevare un'eccezione, ad esempio, quando dividiamo un numero per zero, quindi lo abbiamo circondato con i blocchi Try/Catch.
  6. Catturare l'eccezione denominata DivideByZeroException e assegnare il messaggio di eccezione generato all'ex.
  7. Stampa di testo sulla console per notificare all'utente il tipo/nome dell'eccezione sollevata.
  8. Il blocco Finalmente. Questo verrร  eseguito indipendentemente dal fatto che un'eccezione venga rilevata o meno.
  9. Stampa di un testo sulla console che mostra il risultato dell'operazione di divisione.
  10. Fine del blocco Try, ovvero fine del codice di gestione degli errori.
  11. Fine della sottoprocedura divisionFunction.
  12. Inizio della sottoprocedura principale.
  13. Chiamare/invocare la sottoprocedura divisionFunction. Qui vengono passati i valori dei due argomenti interi. Il valore di n1=4 e n2=0. Ciรฒ significa che l'operazione di divisione sarร  4\0, ovvero n1\n2.
  14. Messa in pausa della finestra della console in attesa che l'utente intervenga per chiuderla.
  15. Fine della sottoprocedura principale.
  16. Fine del modulo.

Eccezioni definite dall'utente in VB.Net

VB.Net consente di definire eccezioni personalizzate. รˆ possibile ottenere classi di eccezione definite dall'utente dalla classe ApplicationException. Vediamo un esempio:

Esempio di eccezione definita dall'utente in VB.Net

Ecco un esempio di eccezione definita dall'utente in VB.Net:

Passo 1) Creare una nuova applicazione console.

Passo 2) Usa il seguente codice:

Module Module1

    Public Class HeightIsZeroException : Inherits ApplicationException
        Public Sub New(ByVal text As String)
            MyBase.New(text)
        End Sub
    End Class
    Public Class Height
        Dim height As Integer = 0
        Sub showHeight()
            If (height = 0) Then
                Throw (New HeightIsZeroException("Zero Height found"))
            Else
                Console.WriteLine("Height is: {0}", height)
            End If
        End Sub
    End Class
    Sub Main()
        Dim hght As Height = New Height()
        Try
            hght.showHeight()
        Catch ex As HeightIsZeroException
            Console.WriteLine("HeightIsZeroException: {0}", ex.Message)
        End Try
        Console.ReadKey()
    End Sub

End Module

Passo 3) Fai clic sul pulsante Start dalla barra in alto per eseguire il codice. Dovresti ottenere il seguente output:

Messaggio HeightIsZeroException definito dall'utente VB.Net stampato sulla console

Ecco uno screenshot del codice:

Esempio di codice per una classe di eccezione definita dall'utente in VB.Net in Visual Studio

Spiegazione di Code:

  1. Creazione di un modulo denominato Modulo1.
  2. Creazione di una classe di eccezione denominata HeightIsZeroException. La classe eredita tutta la classe ApplicationException.
  3. Creazione di una sottoprocedura denominata New. Ci vorrร  un argomento stringa chiamato testo.
  4. Chiamando il costruttore della classe base e passandogli l'argomento precedente.
  5. Fine della sottoprocedura Nuova.
  6. Fine della classe HeightIsZeroException.
  7. Creazione di una classe denominata Height. Il suo modificatore di accesso pubblico รจ Pubblico, il che significa che sarร  accessibile pubblicamente.
  8. Creazione di una variabile intera denominata Altezza e inizializzazione del suo valore su 0.
  9. Creazione di una sottoprocedura denominata showHeight().
  10. Verificando quando il valore della variabile Altezza รจ 0. Abbiamo utilizzato la condizione Se...Allora.
  11. Per generare HeightIsZeroException se la condizione precedente รจ vera. Il messaggio Altezza zero trovata verrร  visualizzato quando viene lanciata questa eccezione.
  12. La parte Else da eseguire quando la condizione If non รจ vera.
  13. Messaggio da stampare sulla console che mostra l'altezza quando รจ diversa da 0.
  14. Fine della condizione If.
  15. Fine della procedura secondaria showHeight().
  16. Fine della lezione Altezza.
  17. Inizio della sottoprocedura principale.
  18. Creazione di un oggetto denominato Height come istanza della classe Height.
  19. Inizio del blocco di gestione delle eccezioni.
  20. Richiamo la sottoprocedura showHeight() definita nella classe Height. Abbiamo utilizzato un oggetto di questa classe per accedere a questo metodo. Questa riga potrebbe generare un'eccezione. Pertanto, l'abbiamo racchiusa in un codice di gestione delle eccezioni.
  21. Catturare l'eccezione HeightIsZeroException come oggetto ex nel caso in cui si verifichi.
  22. Il messaggio da stampare sulla console quando viene rilevata HeightIsZeroException.
  23. Fine del blocco di gestione delle eccezioni.
  24. Metti in pausa la finestra della console in attesa che un utente intervenga per chiuderla.
  25. Fine della sottoprocedura principale.
  26. Fine del modulo.

Genera eccezione in VB.Net

Nella gestione delle eccezioni, รจ possibile scegliere di lanciare un oggetto. Tuttavia, l'oggetto deve derivare dalla classe System.Exception, direttamente o indirettamente. Ad esempio:

Esempio di eccezione di lancio in VB.Net

Di seguito รจ riportato un esempio di generazione di eccezione in VB.Net:

Passo 1) Creare una nuova applicazione console.

Passo 2) Usa il seguente codice:

Module Module1

    Sub Main()
        Try
            Throw New ApplicationException("Throwing a custom exception")
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            Console.WriteLine("The Finally Block")
        End Try
        Console.ReadKey()
    End Sub


End Module

Passo 3) Fai clic sul pulsante Start dalla barra in alto per eseguire il codice. Dovresti ottenere quanto segue:

Output della console dell'istruzione Throw di VB.Net che mostra il messaggio di eccezione personalizzato

Ecco uno screenshot del codice:

Esempio di codice VB.Net per lanciare un'eccezione con Try Catch Finally

Spiegazione di Code:

  1. Creazione di un modulo denominato Modulo1.
  2. Inizio della sottoprocedura principale.
  3. Inizio del codice di gestione degli errori.
  4. Generazione di un oggetto eccezione. Questo codice potrebbe generare un'eccezione, quindi lo abbiamo circondato con un blocco Try/Catch.
  5. Catturare un'eccezione come oggetto ex se la linea genera un'eccezione.
  6. Stampa del messaggio di eccezione sulla console nel caso in cui si verifichi.
  7. Il blocco Finalmente viene eseguito indipendentemente dal fatto che un'eccezione venga rilevata o meno.
  8. Il messaggio da stampare sulla console quando viene eseguito il blocco Finalmente.
  9. Fine del codice di gestione delle eccezioni.
  10. Metti in pausa la console per un po' in attesa che un utente intervenga per chiuderla.
  11. Fine della sottoprocedura principale.
  12. Fine del modulo.

DOMANDE FREQUENTI

Sรฌ. Un'istruzione Try รจ valida anche senza Catch, purchรฉ includa un blocco Finally. Questa struttura Try Finally esegue il codice di pulizia, ma non gestisce l'eccezione stessa.

Sรฌ. Elenca diversi blocchi Catch per gestire diversi tipi di eccezione. Ordinali dal piรน specifico al meno specifico, perchรฉ VB.Net li controlla in sequenza e utilizza la prima corrispondenza.

Quasi sempre. Viene eseguito indipendentemente dal fatto che venga intercettata un'eccezione o meno, e persino dopo un Return. Viene saltato solo in caso di istruzione End o di StackOverflowException.

Throw rilancia l'eccezione corrente e preserva il suo stack originale trace. Throw ex resetta lo stack trace alla riga corrente, nascondendo il punto in cui l'errore รจ effettivamente iniziato. Preferisci Throw semplice.

Un errore di sintassi viene rilevato dal compilatore prima dell'esecuzione del programma. Un'eccezione si verifica in fase di esecuzione e puรฒ essere gestita con un blocco Try Catch.

Tra le eccezioni piรน frequenti si annoverano DivideByZeroException, NullReferenceException, IndexOutOfRangeException, FormatException e OverflowException. Tutte ereditano da System.Exception e possono essere intercettate singolarmente.

Sรฌ. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. Copilota GitHub Trasforma un commento in linguaggio naturale in un blocco Try Catch Finally completo e suggerisce il tipo di eccezione corretto. Esaminare sempre il gestore generato.

Sรฌ. Visual Studio intelliCode Offre il completamento automatico di riga intera e sensibile al contesto per le clausole Catch e i tipi di eccezione, appreso da migliaia di progetti open source.

Riassumi questo post con: