Try...Catch...Finally, instruction (Visual Basic)

Mise à jour : novembre 2007

Permet de traiter une partie ou l'ensemble des erreurs possibles pouvant se produire dans un bloc de code donné, tout en continuant à exécuter le code.

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

Éléments

  • tryStatements
    Facultatif. Instructions dans lesquelles une erreur peut se produire. Il peut s'agir d'instructions composées.

  • Catch
    Facultatif. Plusieurs blocs Catch sont autorisés. Si une exception se produit pendant le traitement du bloc Try, chaque instruction Catch est examinée dans l'ordre textuel afin de déterminer si elle gère cette exception, exception représentant l'exception qui a été levée.

  • exception
    Facultatif. Tout nom de variable. La valeur initiale de l'argument exception est la valeur de l'erreur levée. Cet argument est utilisé avec Catch pour spécifier l'erreur interceptée. S'il est omis, l'instruction Catch intercepte n'importe quelle exception.

  • type
    Facultatif. Spécifie le type d'un filtre de classe. Si la valeur de l'argument exception est l'un des types spécifiés par type ou un type dérivé, l'identificateur est lié à l'objet exception.

  • When
    Facultatif. Une instruction Catch avec une clause When intercepte les exceptions uniquement lorsque expression a la valeur True. Une clause When n'est appliquée qu'après le contrôle du type de l'exception, et expression peut faire référence à l'identificateur qui représente l'exception.

  • expression
    Facultatif. Doit pouvoir être converti implicitement en type Boolean. Toute expression qui décrit un filtre générique. Généralement utilisé pour effectuer un filtre selon le numéro de l'erreur. Cet argument est utilisé avec le mot clé When pour spécifier des circonstances permettant d'intercepter l'erreur.

  • catchStatements
    Facultatif. Instruction(s) permettant de gérer des erreurs se produisant dans le bloc Try associé. Il peut s'agir d'une instruction composée.

  • Exit Try
    Facultatif. Mot clé qui décompose la structure Try...Catch...Finally. L'exécution reprend par le code qui suit immédiatement l'instruction End Try. L'instruction Finally sera toujours exécutée. Non autorisé dans les blocs Finally.

  • Finally
    Facultatif. Un bloc Finally est toujours exécuté quand l'exécution quitte une partie quelconque de l'instruction Try.

  • finallyStatements
    Facultatif. Instructions qui sont exécutées à la fin du traitement de toutes les autres erreurs.

  • End Try
    Met fin à la structure Try...Catch...Finally.

Notes

Les variables locales d'un bloc Try ne sont pas disponibles dans un bloc Catch, car ce sont des blocs séparés. Si vous voulez utiliser une variable dans plusieurs blocs, déclarez la variable à l'extérieur de la structure Try...Catch...Finally.

Le bloc Try contient du code susceptible d'inclure des erreurs tandis que le bloc Catch contient du code pouvant gérer toute erreur survenue. Si une erreur se produit dans le bloc Try, le programme de contrôle est passé à l'instruction Catch appropriée pour y être disposé. L'argument exception est une instance de la classe Exception ou une classe qui dérive de la classe Exception. L'instance de la classe Exception correspond à l'erreur qui s'est produite dans le bloc Try. L'instance contient des informations concernant l'erreur. Cela inclut, entre autres choses, son numéro et le message.

Si une instruction Catch ne spécifie pas d'argument exception, elle intercepte tout type de système ou d'exception d'application. Vous devez toujours utiliser cette variation comme dernier bloc Catch dans la structure Try...Catch...Finally, après avoir intercepté toutes les exceptions spécifiques que vous anticipez. Le flux de contrôle ne peut jamais atteindre un bloc Catch qui suit un Catch sans argument exception.

Dans les situations d'un niveau de confiance partiel, comme une application hébergée sur un partage réseau, Try...Catch...Finally n'intercepte pas les exceptions de sécurité qui se produisent avant que la méthode qui contient l'appel ne soit appelée. L'exemple suivant, s'il est placé sur un partage réseau et exécuté à cet endroit, produit l'erreur : "System.Security.SecurityException: Échec de la demande". Pour plus d'informations sur les exceptions de sécurité, consultez 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

Dans la situation d'un niveau de confiance partiel, vous devez placer l'instruction Process.Start dans un Sub séparé. L'appel initial au Sub échoue. Cela permet à Try...Catch de l'intercepter avant le démarrage du Sub qui contient Process.Start et l'exécution de l'exception de sécurité.

Remarque :

Si une instruction Try ne contient pas au moins un bloc Catch, elle doit contenir un bloc Finally.

Exemple

L'exemple simplifié ci-dessous illustre l'utilisation de la structure de l'instruction 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

Voir aussi

Référence

End, instruction

Err, objet (Visual Basic)

Exit, instruction (Visual Basic)

On Error, instruction (Visual Basic)

Exception

GoTo, instruction