Exceptions et gestion des exceptions (Guide de programmation C#)

Mise à jour : Juillet 2008

Les fonctionnalités de gestion des exceptions du langage C# vous aident à gérer les situations inattendues ou exceptionnelles qui surviennent pendant l'exécution d'un programme. 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 les ressources après. Les exceptions peuvent être générées par le Common Language Runtime (CLR), par le .NET Framework ou des bibliothèques tierces ou par le code d'application. Les exceptions sont créées à l'aide du mot clé throw.

Dans de nombreux cas, une exception peut être levée non par une méthode que votre code a appelée directement, mais par une autre méthode plus bas dans la pile des appels. Lorsque cela arrive, le CLR déroule la pile à la recherche d'une méthode comportant un bloc catch pour le type d'exception spécifique et il exécute le premier bloc catch qu'il trouve. S'il ne trouve aucun bloc catch approprié dans la pile des appels, il arrête le processus et affiche un message destiné à l'utilisateur.

Dans cet exemple, une méthode teste une division par zéro et intercepte l'erreur. Sans la gestion des exceptions, ce programme se terminerait sur une erreur L'exception DivideByZeroException n'a pas été gérée.

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 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 exceptions

Les exceptions ont les propriétés suivantes :

  • Les exceptions sont des types qui dérivent en définitive tous de System.Exception.

  • Délimitez toute instruction susceptible de lever des exceptions par un bloc try.

  • Lorsqu'une exception se produit dans le bloc try, le flux de contrôle est immédiatement transmis au premier gestionnaire d'exceptions associé présent dans la pile des appels. En C#, le mot clé catch est utilisé pour définir un gestionnaire d'exceptions.

  • Si aucun gestionnaire d'exceptions pour une exception donnée n'est présent, le programme cesse de s'exécuter avec un message d'erreur.

  • Interceptez uniquement les exceptions que vous pouvez gérer tout en laissant l'application dans un état connu. Si vous interceptez une System.Exception, levez-la de nouveau à l'aide du mot clé throw à la fin du bloc catch.

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

  • Les exceptions peuvent être générées explicitement par un programme à l'aide du mot clé throw.

  • Les objets Exception contiennent des informations détaillées à propos de l'erreur, telles que l'état de la pile des appels et une description du texte de l'erreur.

  • Le code figurant dans les blocs finally est exécuté même si une exception est levée. Utilisez un bloc finally pour libérer des ressources, notamment pour fermer tous les flux ou fichiers qui ont été ouverts dans le bloc try.

  • Les exceptions managées dans le .NET Framework sont implémentées par dessus le mécanisme de gestion structurée des exceptions Win32. Pour plus d'informations, consultez Structured Exception Handling (C++) et A Crash Course on the Depths of Win32 Structured Exception Handling.

Rubriques connexes

Consultez les rubriques suivantes pour plus d'informations sur les exceptions et la gestion des exceptions :

Spécifications du langage C#

Pour plus d'informations, consultez les sections suivantes dans Spécifications du langage C#.

  • 8.9.5 L'instruction throw

  • 8.10 L'instruction try

  • 16 Exceptions

Voir aussi

Concepts

Guide de programmation C#

Vue d'ensemble des exceptions

Référence

Mots clés C#

throw (Référence C#)

try-catch (Référence C#)

try-finally (Référence C#)

try-catch-finally (Référence C#)

Autres ressources

Instructions de conception pour les exceptions

Gestion et levée des exceptions

Writing Reliable .NET Code

Historique des modifications

Date

Historique

Raison

Juillet 2008

Modification de l'exemple de code et ajout de texte sur le déroulement de la pile

Résolution des bogues de contenu.

Juillet 2008

Ajout d'un exemple décrivant le bloc finally.

Améliorations apportées aux informations.

Juillet 2008

Ajout d'informations sur le mécanisme de gestion structurée des exceptions sous Win32.

Améliorations apportées aux informations.