Exceptions et gestion des exceptions (Guide de programmation C#)Exceptions and Exception Handling (C# Programming Guide)

Les fonctionnalités de gestion des exceptions du langage C# vous aident à gérer les situations inattendues ou exceptionnelles qui se produisent lorsqu’un programme est en cours d’exécution.The C# language's exception handling features help you deal with any unexpected or exceptional situations that occur when a program is running. La gestion des exceptions utilise les mots clés try, catch et finally pour tenter des actions susceptibles de ne pas réussir, pour gérer les défaillances lorsque vous pensez que c’est justifié et pour nettoyer ensuite les ressources.Exception handling uses the try, catch, and finally keywords to try actions that may not succeed, to handle failures when you decide that it is reasonable to do so, and to clean up resources afterward. Les exceptions peuvent être générées par le common language runtime (CLR), par .NET Framework ou des bibliothèques tierces, ou par le code de l’application.Exceptions can be generated by the common language runtime (CLR), by the .NET Framework or any third-party libraries, or by application code. Les exceptions sont créées avec le mot clé throw.Exceptions are created by using the throw keyword.

Dans de nombreux cas, une exception peut être levée non pas par une méthode appelée directement par votre code, mais par une autre méthode plus loin dans la pile des appels.In many cases, an exception may be thrown not by a method that your code has called directly, but by another method further down in the call stack. Dans ce cas, le CLR déroule la pile à la recherche d’une méthode avec un bloc catch pour le type d’exception concerné et exécute le premier bloc catch de ce type qu’il trouve.When this happens, the CLR will unwind the stack, looking for a method with a catch block for the specific exception type, and it will execute the first such catch block that if finds. S’il ne trouve pas de bloc catch dans la pile des appels, il termine le processus et affiche un message à l’utilisateur.If it finds no appropriate catch block anywhere in the call stack, it will terminate the process and display a message to the user.

Dans cet exemple, une méthode teste la division par zéro et intercepte l’erreur.In this example, a method tests for division by zero and catches the error. Sans la gestion des exceptions, ce programme se terminerait avec une erreur DivideByZeroException non gérée.Without the exception handling, this program would terminate with a DivideByZeroException was unhandled error.

class ExceptionTest
{
    static double SafeDivision(double x, double y)
    {
        if (y == 0)
            throw new System.DivideByZeroException();
        return x / y;
    }
    static void Main()
    {
        // Input for test purposes. Change the values to see
        // exception handling behavior.
        double a = 98, b = 0;
        double result = 0;

        try
        {
            result = SafeDivision(a, b);
            Console.WriteLine("{0} divided by {1} = {2}", a, b, result);
        }
        catch (DivideByZeroException e)
        {
            Console.WriteLine("Attempted divide by zero.");
        }
    }
}

Vue d’ensemble des exceptionsExceptions Overview

Les exceptions ont les propriétés suivantes :Exceptions have the following properties:

  • Les exceptions sont des types qui dérivent tous en définitive de System.Exception.Exceptions are types that all ultimately derive from System.Exception.

  • Utilisez un bloc try autour des instructions qui peuvent lever des exceptions.Use a try block around the statements that might throw exceptions.

  • Dès qu’une exception se produit dans le bloc try, le flux de contrôle passe immédiatement au premier gestionnaire d’exceptions associé présent dans la pile des appels.Once an exception occurs in the try block, the flow of control jumps to the first associated exception handler that is present anywhere in the call stack. En C#, le mot clé catch est utilisé pour définir un gestionnaire d’exceptions.In C#, the catch keyword is used to define an exception handler.

  • Si aucun gestionnaire d’exceptions n’est présent pour une exception donnée, le programme s’arrête avec un message d’erreur.If no exception handler for a given exception is present, the program stops executing with an error message.

  • N’interceptez pas d’exception si vous ne pouvez pas la gérer tout en laissant l’application dans un état connu.Do not catch an exception unless you can handle it and leave the application in a known state. Si vous interceptez System.Exception, levez-la de nouveau avec le mot clé throw à la fin du bloc catch.If you catch System.Exception, rethrow it using the throw keyword at the end of the catch block.

  • Si un bloc catch définit une variable d’exception, vous pouvez l’utiliser pour obtenir plus d’informations sur le type d’exception qui s’est produit.If a catch block defines an exception variable, you can use it to obtain more information about the type of exception that occurred.

  • Les exceptions peuvent être générées explicitement par un programme avec le mot clé throw.Exceptions can be explicitly generated by a program by using the throw keyword.

  • Les objets Exception contiennent des informations détaillées sur l'erreur, telles que l'état de la pile des appels et une description du texte de l'erreur.Exception objects contain detailed information about the error, such as the state of the call stack and a text description of the error.

  • Le code qui se trouve dans un bloc finally est exécuté même si une exception est levée.Code in a finally block is executed even if an exception is thrown. Utilisez un bloc finally pour libérer des ressources, par exemple pour fermer tous les flux ou fichiers qui ont été ouverts dans le bloc try.Use a finally block to release resources, for example to close any streams or files that were opened in the try block.

  • Les exceptions gérées dans .NET Framework sont implémentées au-dessus du mécanisme de gestion structurée des exceptions de Win32.Managed exceptions in the .NET Framework are implemented on top of the Win32 structured exception handling mechanism. Pour plus d’informations, consultez les pages Gestion structurée des exceptions (C/C++) et Cours intensif sur la gestion structurée des exceptions de Win32.For more information, see Structured Exception Handling (C/C++) and A Crash Course on the Depths of Win32 Structured Exception Handling.

Consultez les rubriques suivantes pour plus d’informations sur les exceptions et la gestion des exceptions :See the following topics for more information about exceptions and exception handling:

Spécification du langage C#C# Language Specification

Pour plus d’informations, consultez Exceptions dans la Spécification du langage C#.For more information, see Exceptions in the C# Language Specification. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.The language specification is the definitive source for C# syntax and usage.

Voir aussiSee also