Aller au contenu

Programmation Visual Basic .NET/Gestion d'exception

Un livre de Wikilivres.

Levées d'exception

[modifier | modifier le wikicode]

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

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 | modifier le wikicode]

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].

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