Comment gérer les exceptions en Python (Try-Except-Finally)

Apprenez à gérer les exceptions en Python à l’aide des blocs try, except, else et enfin. Écrivez du code Python sans erreur et résistant aux plantages.

Essayez cette solution dans l'éditeur

Aperçu

Un logiciel robuste doit être prêt à gérer des conditions inattendues, telles que des fichiers manquants, des entrées utilisateur non valides, des pannes de base de données ou des interruptions de réseau. Lorsqu'une erreur se produit en Python, elle déclenche une exception. Si elles ne sont pas gérées, les exceptions arrêtent immédiatement votre programme et impriment une pile de traçage.

Le principal outil de Python pour gérer les erreurs d'exécution est le bloc « try-sauf ». Vous placez le code susceptible de générer une erreur dans le bloc « try » et définissez le code de gestion des erreurs dans un ou plusieurs blocs « except ». Spécifier la classe d'exception exacte (comme `ValueError` ou `ZeroDivisionError`) est fortement recommandé, car la capture de toutes les exceptions génériques (`sauf :`) peut masquer des bogues.

Pour rendre votre flux d'exceptions plus expressif, Python fournit deux blocs supplémentaires : "else" et "finally". Le bloc « else » ne s'exécute que si aucune exception n'a été levée dans le bloc « try », ce qui est utile pour le code qui ne doit s'exécuter qu'en cas de succès. Le bloc «finally» s'exécute *toujours*, qu'une exception se soit produite ou non, ce qui en fait l'endroit idéal pour les nettoyages comme la fermeture de fichiers ou de connexions à une base de données.

Sortie de code et d'exécution

Ce script démontre une gestion robuste des erreurs en Python en utilisant try, except, else et enfin.

handle_errors.py
Essayez dans l'éditeur
def divide_numbers(a, b):
    try:
        # Code that might raise an exception
        result = a / b
    except ZeroDivisionError:
        # Handling a specific exception
        print("Error: Cannot divide by zero!")
    except TypeError:
        # Handling another exception type
        print("Error: Inputs must be numbers!")
    else:
        # Run only if try block succeeded
        print(f"Success! Result of {a}/{b} is {result}")
    finally:
        # Runs no matter what
        print("Division attempt completed.")

divide_numbers(10, 2)
print("---")
divide_numbers(10, 0)
Sortie terminale
Success! Result of 10/2 is 5.0
Division attempt completed.
---
Error: Cannot divide by zero!
Division attempt completed.

Mise en œuvre étape par étape

  • Placez le code qui pourrait échouer dans un bloc try.
  • Détectez des types d’erreurs spécifiques avec les blocs except ExceptionType: pour gérer les échecs avec élégance.
  • Utilisez else pour le code qui doit s’exécuter uniquement sur les blocs try réussis.
  • Utilisez-le enfin pour garantir l'exécution des actions de nettoyage quelles que soient les erreurs.

Foire aux questions

Puis-je intercepter plusieurs exceptions dans un seul bloc except ?

Oui, vous pouvez les transmettre sous forme de tuple : except (ValueError, TypeError) comme e :.

Comment puis-je déclencher mes propres exceptions ?

Utilisez le mot-clé raise suivi de l'instance d'exception : raise ValueError("Valeur de configuration invalide").

Sujets connexes

Ressources Python recommandées

Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.