Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Défi : Gestion des Erreurs | Structures de Données et Gestion des Fichiers
C# Au-Delà des Bases

bookDéfi : Gestion des Erreurs

La syntaxe try-catch possède une extension permettant d'intercepter des types d'erreurs spécifiques et de les traiter séparément :

index.cs

index.cs

copy
1234567891011121314151617
try { // code } catch (ExceptionType errorVarName) { // code } catch (ExceptionType errorVarName) { // code } ... finally { // code }

Le type Exception utilisé dans le chapitre précédent intercepte tous les types d'erreurs, mais il existe des sous-types de Exception qui permettent de gérer des erreurs plus spécifiques. Voici quelques types d'exceptions courants :

  1. DivideByZeroException : division par zéro ;
  2. FileNotFoundException : le fichier auquel on tente d'accéder n'existe pas ;
  3. KeyNotFoundException : la clé du dictionnaire n'existe pas ;
  4. IndexOutOfRangeException : l'indice spécifié d'un tableau ou d'une liste est invalide.

Le terme errorVarName désigne une variable qui stocke l'objet Exception et contient des informations telles que le message d'erreur, accessible via errorVarName.Message. Il est possible de l'omettre si elle n'est pas utilisée :

index.cs

index.cs

copy
12345678910111213
try { // code } catch (ExceptionType) { // code } ... finally { // code }

Voici un exemple d'utilisation de ce type de bloc try-catch :

index.cs

index.cs

copy
123456789101112131415161718192021222324252627
using System; class Program { static void Main(string[] args) { int[] myArray = { 0, 2, 4, 6, 8, 10 }; int i = 0; while (true) { try { Console.Write(myArray[i] / i + " "); i++; } catch(DivideByZeroException) { i++; } catch(IndexOutOfRangeException) { break; } } } }

En utilisant maintenant ces concepts. Complétez les espaces vides avec les types d'exceptions appropriés dans le code suivant pour terminer le défi.

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { int[] numbers = { 1, 2, 5, 7, 9 }; var numberNames = new Dictionary<int, string>(); numberNames.Add(1, "One"); numberNames.Add(2, "Two"); numberNames.Add(5, "Five"); numberNames.Add(9, "Nine"); int i = 0; while (true) { try { int key = numbers[i]; Console.WriteLine($"{key} is {numberNames[key]}"); i++; } catch (___) { break; } catch (___) { numberNames.Add(7, "Seven"); } } } }

Utiliser le type d'exception pertinent pour chaque bloc catch. Lire le code et déterminer quel bloc catch est le plus approprié pour gérer un certain type d'exception.

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435
using System; using System.Collections.Generic; public class HelloWorld { public static void Main(string[] args) { int[] numbers = { 1, 2, 5, 7, 9 }; var numberNames = new Dictionary<int, string>(); numberNames.Add(1, "One"); numberNames.Add(2, "Two"); numberNames.Add(5, "Five"); numberNames.Add(9, "Nine"); int i = 0; while (true) { try { int key = numbers[i]; Console.WriteLine($"{key} is {numberNames[key]}"); i++; } catch (IndexOutOfRangeException) { break; } catch (KeyNotFoundException) { numberNames.Add(7, "Seven"); } } } }
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 10

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Awesome!

Completion rate improved to 2.04

bookDéfi : Gestion des Erreurs

Glissez pour afficher le menu

La syntaxe try-catch possède une extension permettant d'intercepter des types d'erreurs spécifiques et de les traiter séparément :

index.cs

index.cs

copy
1234567891011121314151617
try { // code } catch (ExceptionType errorVarName) { // code } catch (ExceptionType errorVarName) { // code } ... finally { // code }

Le type Exception utilisé dans le chapitre précédent intercepte tous les types d'erreurs, mais il existe des sous-types de Exception qui permettent de gérer des erreurs plus spécifiques. Voici quelques types d'exceptions courants :

  1. DivideByZeroException : division par zéro ;
  2. FileNotFoundException : le fichier auquel on tente d'accéder n'existe pas ;
  3. KeyNotFoundException : la clé du dictionnaire n'existe pas ;
  4. IndexOutOfRangeException : l'indice spécifié d'un tableau ou d'une liste est invalide.

Le terme errorVarName désigne une variable qui stocke l'objet Exception et contient des informations telles que le message d'erreur, accessible via errorVarName.Message. Il est possible de l'omettre si elle n'est pas utilisée :

index.cs

index.cs

copy
12345678910111213
try { // code } catch (ExceptionType) { // code } ... finally { // code }

Voici un exemple d'utilisation de ce type de bloc try-catch :

index.cs

index.cs

copy
123456789101112131415161718192021222324252627
using System; class Program { static void Main(string[] args) { int[] myArray = { 0, 2, 4, 6, 8, 10 }; int i = 0; while (true) { try { Console.Write(myArray[i] / i + " "); i++; } catch(DivideByZeroException) { i++; } catch(IndexOutOfRangeException) { break; } } } }

En utilisant maintenant ces concepts. Complétez les espaces vides avec les types d'exceptions appropriés dans le code suivant pour terminer le défi.

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { int[] numbers = { 1, 2, 5, 7, 9 }; var numberNames = new Dictionary<int, string>(); numberNames.Add(1, "One"); numberNames.Add(2, "Two"); numberNames.Add(5, "Five"); numberNames.Add(9, "Nine"); int i = 0; while (true) { try { int key = numbers[i]; Console.WriteLine($"{key} is {numberNames[key]}"); i++; } catch (___) { break; } catch (___) { numberNames.Add(7, "Seven"); } } } }

Utiliser le type d'exception pertinent pour chaque bloc catch. Lire le code et déterminer quel bloc catch est le plus approprié pour gérer un certain type d'exception.

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435
using System; using System.Collections.Generic; public class HelloWorld { public static void Main(string[] args) { int[] numbers = { 1, 2, 5, 7, 9 }; var numberNames = new Dictionary<int, string>(); numberNames.Add(1, "One"); numberNames.Add(2, "Two"); numberNames.Add(5, "Five"); numberNames.Add(9, "Nine"); int i = 0; while (true) { try { int key = numbers[i]; Console.WriteLine($"{key} is {numberNames[key]}"); i++; } catch (IndexOutOfRangeException) { break; } catch (KeyNotFoundException) { numberNames.Add(7, "Seven"); } } } }
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 10
some-alt