Programmation Visual Basic .NET/Gestion d'exception

Levées d'exception modifier

Pour éviter que des erreurs bloquent l'exécution du programme il est possible de définir un comportement quand elles surviennent.

On Error GoTo modifier

La méthode utilisée en VBA est toujours disponible. Celle-ci n'était pas structuré car fait appel à un Goto vers une étiquette :

    Public Sub Main()
        On Error GoTo Etiquette1
        Dim Resultat As Integer = 2
        Dim a = 1
        Dim b = 0
        Resultat = a / b  ' Division par zéro
Etiquette1:
        MessageBox.Show(Resultat) ' renvoie 2
    End Sub

Pour éviter d'avoir à définir des étiquettes on peut tout simplement ignorer les erreurs un moment (puis les réactiver avec On Error GoTo 0 :

        On Error Resume Next
        Dim Resultat As Integer = 2
        Dim a = 1
        Dim b = 0
        Resultat = a / b
        On Error GoTo 0
        MessageBox.Show(Resultat)

Try...Catch...Finally modifier

Le gestionnaire d'erreur structuré s'appelle Try...Catch...Finally[1]. De nombreux types d'erreur y sont disponible par héritage de la classe Exception.

    Public Sub Main()
        Dim Resultat As Integer = 2
        Dim a = 1
        Dim b = 0
        Try
            Resultat = a / b
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            MessageBox.Show(Resultat)
        End Try
    End Sub

Remarque : pour relancer une exception dans un bloc Catch, utiliser le mot clé Throw sans argument. En effet il reset la propriété .StackTrace de l'objet exception en cas d'argument[2].

Références modifier

  1. (anglais) http://msdn.microsoft.com/fr-fr/library/fk6t46tz%28v=vs.71%29.aspx
  2. (anglais) Blog d'Eric Lippert