3.1 Capture des exceptions
On n'en parlerait pas tant des exceptions si on devait juste les observer. Les exceptions sont des objets spéciaux avec lesquels ton programme en Python peut travailler. La gestion des exceptions est un aspect important de la programmation qui permet d'améliorer la fiabilité et la résilience des programmes.
En Python, pour capturer et gérer les exceptions, on utilise les constructions try, except, else et finally. Ces constructions permettent d'intercepter les erreurs survenant pendant l'exécution du programme et de prendre les mesures adéquates.
La construction try-except
La construction try-except est utilisée pour capturer et gérer les exceptions. Le bloc try contient du code qui peut déclencher une exception, et le bloc except contient du code qui sera exécuté en cas d'exception.
Exemple :
try:
result = 10 / 0
except ZeroDivisionError:
print("Erreur : division par zéro.")
Si dans le code du bloc try une exception ZeroDivisionError se produit, elle sera capturée par le bloc except et le code avec l'appel print() sera exécuté.
Gestion de plusieurs exceptions
Tu peux gérer plusieurs types d'exceptions en les spécifiant dans des blocs except séparés.
try:
result = int("abc")
except ZeroDivisionError:
print("Erreur : division par zéro.")
except ValueError:
print("Erreur : valeur incorrecte.")
Capture de toutes les exceptions
Si tu veux capturer toutes les exceptions, tu peux utiliser un bloc except sans spécifier de type d'exception. Cependant, ce n'est pas recommandé, car cela peut rendre le débogage difficile et masquer des erreurs importantes.
try:
result = 10 / 0
except:
print("Une erreur est survenue.")
3.2 Les opérateurs else et finally
En plus des opérateurs try et except, il y en a deux autres optionnels : else et finally. Laisse-moi t'en parler un peu plus en détail.
La construction try-except-else
Le bloc else est utilisé pour exécuter du code si aucun exception n'a été levée dans le bloc try.
try:
result = 10 / 2
except ZeroDivisionError:
print("Erreur : division par zéro.")
else:
print(f"Résultat : {result}")
La construction try-except-finally
Le bloc finally contient du code qui sera exécuté qu'une exception ait été levée ou non. C'est utile pour libérer des ressources ou effectuer des opérations de fermeture.
try:
result = 10 / 0
except ZeroDivisionError:
print("Erreur : division par zéro.")
finally:
print("Ce bloc s'exécute toujours.")
Exemple complet : try-except-else-finally
Exemple :
try:
result = 10 / 2
except ZeroDivisionError:
print("Erreur : division par zéro.")
else:
print(f"Résultat : {result}")
finally:
print("Ce bloc s'exécute toujours.")
3.3 Exemple try-except-else-finally
Voyons un grand exemple réel. Par exemple, on essaie de lire des données à partir d'un fichier sur le disque — quoi de plus simple ?
file = open("file.txt", "r")
content = file.read()
print(content)
Qu'est-ce qui pourrait mal tourner ? Par exemple, tout :
- Le fichier pourrait être absent. Il pourrait avoir été supprimé par accident, non enregistré, ou ton programme pourrait se trouver sur un autre ordinateur où il n'a jamais été.
- Erreur de lecture du fichier. Ton programme n'y a pas accès car il se trouve dans un répertoire nécessitant des droits d'administrateur.
- Un autre programme écrit actuellement dans ce fichier et il ne peut pas être lu — il a un accès exclusif au fichier.
Pas assez ? N'oublie pas que peu importe à quel moment une erreur survient lors du travail avec un fichier, tu dois absolument le « fermer » pour que le système d'exploitation libère les ressources allouées pour travailler avec ce fichier.
Alors le code réel ressemblera à peu près à ça :
try:
file = open("non_existent_file.txt", "r")
content = file.read()
except FileNotFoundError:
print("Erreur : fichier non trouvé.")
except IOError:
print("Erreur : erreur d'entrée-sortie.")
else:
print(content)
finally:
if 'file' in locals() and not file.closed:
file.close()
print("Fichier fermé.")
Bienvenue dans le monde réel, où tu dois écrire du code non seulement pour le "scénario de travail", mais aussi pour tous les scénarios possibles qui pourraient mal tourner.
Bon, je ne vais pas te faire peur — c'est plus simple que ça en a l'air. Il suffit de comprendre ce que sont les conditions de bord (corner cases) et d'ajouter à temps la vérification des erreurs standard. Le reste, les frameworks modernes le feront pour toi.
GO TO FULL VERSION