Numérique et Sciences Informatiques > Langages de Programmation > Gestion des Erreurs et Exceptions > Types d'erreurs

Les Exceptions : une gestion des erreurs sophistiquée

Découvrez comment gérer efficacement les erreurs en programmation à travers le concept des exceptions. Des explications claires et des exemples pratiques pour les lycéens.

Introduction aux Exceptions

En programmation, une exception est un événement anormal qui interrompt le flux normal d'exécution d'un programme. Plutôt que de planter brutalement, le programme peut *attraper* (catch) cette exception et prendre des mesures appropriées pour gérer la situation. Ce mécanisme permet de rendre les programmes plus robustes et plus fiables. La gestion des exceptions permet de séparer le code normal du code de gestion des erreurs, ce qui rend le code plus lisible et plus maintenable.

Le Bloc Try-Except (Python)

La plupart des langages de programmation offrent des mécanismes similaires pour gérer les exceptions. En Python, on utilise les blocs try et except.

Fonctionnement:

  • Le code susceptible de lever une exception est placé à l'intérieur du bloc try.
  • Si une exception se produit dans le bloc try, l'exécution de ce bloc est interrompue et le contrôle est transféré au bloc except correspondant au type d'exception levée.
  • Si aucun bloc except ne correspond à l'exception levée, le programme s'arrête.

Exemple:
try:
    nombre = int(input("Entrez un nombre: "))
    resultat = 10 / nombre
    print("Le résultat est:", resultat)
except ValueError:
    print("Erreur: Vous devez entrer un nombre entier.")
except ZeroDivisionError:
    print("Erreur: Division par zéro impossible.")
Dans cet exemple, on tente de convertir l'entrée utilisateur en un entier et de diviser 10 par ce nombre. Si l'utilisateur entre une chaîne de caractères non numérique, une exception `ValueError` est levée, et le bloc except ValueError est exécuté. Si l'utilisateur entre 0, une exception `ZeroDivisionError` est levée, et le bloc except ZeroDivisionError est exécuté.

Le Bloc Finally

Le bloc finally est optionnel et est exécuté après le bloc try, qu'une exception ait été levée ou non. Il est généralement utilisé pour effectuer des opérations de nettoyage, comme fermer un fichier ou libérer des ressources.

Exemple:

fichier = None
try:
    fichier = open("monfichier.txt", "r")
    contenu = fichier.read()
    print(contenu)
except FileNotFoundError:
    print("Erreur: Le fichier n'existe pas.")
finally:
    if fichier:
        fichier.close()
    print("Fermeture du fichier.")
Dans cet exemple, on tente d'ouvrir un fichier et de lire son contenu. Le bloc finally assure que le fichier est fermé, même si une exception FileNotFoundError est levée.

Lever des Exceptions Manuellement

Il est également possible de lever des exceptions manuellement à l'aide du mot-clé raise. Cela peut être utile pour signaler des erreurs spécifiques ou pour propager une exception vers un niveau supérieur du code.

Exemple:

def verifier_age(age):
    if age < 0:
        raise ValueError("L'âge ne peut pas être négatif.")
    if age > 150:
        raise ValueError("L'âge est improbable.")
    print("Âge valide.")

try:
    age = int(input("Entrez votre âge: "))
    verifier_age(age)
except ValueError as e:
    print("Erreur:", e)
Dans cet exemple, la fonction verifier_age lève une exception ValueError si l'âge est négatif ou supérieur à 150.

Gérer Plusieurs Types d'Exceptions

Il est possible de gérer différents types d'exceptions dans un même bloc try en utilisant plusieurs blocs except. Cela permet de traiter chaque type d'erreur de manière appropriée. Il est aussi possible d'attraper toutes les exceptions en utilisant 'except Exception as e:'

try:
    # Code qui peut lever différentes exceptions
except ValueError as e:
    print("Erreur de valeur:", e)
except TypeError as e:
    print("Erreur de type:", e)
except Exception as e:
    print("Une erreur est survenue:", e)

Ce qu'il faut retenir

  • Exceptions: Événements anormaux interrompant le flux d'exécution.
  • Bloc Try-Except: Permet d'attraper et de gérer les exceptions. Le code susceptible de lever une exception est placé dans le bloc try, et le code de gestion des exceptions est placé dans le bloc except.
  • Bloc Finally: Exécuté après le bloc Try, qu'une exception ait été levée ou non. Utile pour le nettoyage.
  • Mot-clé Raise: Permet de lever des exceptions manuellement.

FAQ

  • Quelle est la différence entre gérer une erreur avec un if/else et avec un try/except?

    Un if/else est utilisé pour gérer des conditions prévisibles. Un try/except est utilisé pour gérer des situations exceptionnelles et imprévisibles qui pourraient faire planter le programme.
  • Pourquoi est-il important de gérer les exceptions?

    Pour rendre les programmes plus robustes, éviter les plantages, et séparer le code normal du code de gestion des erreurs.