BAC PRO CIEL

← Retour Python
Cours en ligne

Python - Module 12

Gérer les erreurs avec try / except
Ce module présente la gestion des erreurs en Python. L’objectif est de rendre les scripts plus robustes, notamment lors des saisies utilisateur, de la lecture de fichiers ou des connexions réseau.

Sommaire

1. Pourquoi utiliser try ?

Quand un programme rencontre une erreur non gérée, il plante et s’arrête. Avec try, on peut gérer certaines erreurs proprement et afficher un message compréhensible pour l’utilisateur.

À retenir :
Un programme sans gestion d’erreur peut planter. Un programme avec try / except peut réagir proprement.

2. Structure de base

Le bloc try contient le code risqué. Le bloc except contient le code exécuté si une erreur se produit.

try: # code risqué except: # code exécuté si erreur

Exemple simple

try: x = int(input("Entrer un nombre : ")) except: print("Erreur : ce n’est pas un nombre")
Entrer un nombre : abc Erreur : ce n’est pas un nombre
Attention :
except: seul capture toutes les erreurs. C’est pratique pour découvrir, mais il vaut mieux ensuite capturer une erreur précise.

3. Capturer une erreur précise

Il est préférable d’indiquer le type d’erreur que l’on souhaite gérer. Cela évite de masquer des bugs importants.

try: x = int(input("Entrer un nombre : ")) except ValueError: print("Erreur de conversion")
Entrer un nombre : abc Erreur de conversion
Ici, ValueError correspond à une conversion impossible, par exemple int("abc").

4. Erreurs courantes à connaître

Erreur Situation fréquente
ValueError Conversion impossible : int("abc")
FileNotFoundError Fichier absent
ZeroDivisionError Division par zéro
IndexError Index hors liste ou hors chaîne
ConnectionRefusedError Connexion réseau refusée
TimeoutError Temps d’attente dépassé

5. Exemple avec fichier

Si un fichier n’existe pas, Python peut déclencher une erreur FileNotFoundError.

try: with open("data.txt", "r") as f: print(f.read()) except FileNotFoundError: print("Fichier introuvable")
Fichier introuvable

6. try / except / else

Le bloc else s’exécute seulement si aucune erreur n’a eu lieu dans le bloc try.

try: x = int(input("Nombre : ")) except ValueError: print("Erreur") else: print("Conversion réussie :", x)
Nombre : 12 Conversion réussie : 12

7. finally

Le bloc finally s’exécute toujours, qu’il y ait une erreur ou non.

try: f = open("data.txt", "r") except: print("Erreur") finally: print("Fin du programme")
Erreur Fin du programme
finally est utile pour exécuter une action finale, comme fermer une ressource ou afficher un message de fin.

8. Récupérer le message d’erreur

On peut récupérer le message exact d’une erreur avec as e.

try: x = int("abc") except ValueError as e: print("Erreur :", e)
Erreur : invalid literal for int() with base 10: 'abc'

9. Cas concret : vérifier une adresse IP

Le module ipaddress permet de vérifier si une adresse IP saisie par l’utilisateur est valide.

import ipaddress try: ip = ipaddress.ip_address(input("IP : ")) print("IP valide :", ip) except ValueError: print("IP invalide")
IP : 192.168.1.20 IP valide : 192.168.1.20

10. Cas réseau

Lors d’une connexion réseau, plusieurs erreurs peuvent se produire : serveur absent, connexion refusée, délai dépassé, etc.

import socket try: client = socket.socket() client.connect(("192.168.1.10", 5000)) except ConnectionRefusedError: print("Connexion refusée") except TimeoutError: print("Temps dépassé")
Ce type de gestion d’erreur est très utile dans les scripts réseau ou les clients TCP.

11. Erreurs fréquentes

Utiliser except seul trop longtemps

try: x = int(input("Nombre : ")) except: print("Erreur")
Ce code capture toutes les erreurs et peut masquer les vrais bugs. Il vaut mieux capturer une erreur précise comme ValueError.

Oublier les deux-points

try x = int("abc") except ValueError print("Erreur")
SyntaxError: invalid syntax

Mettre trop de code dans le try

try: x = int(input("Nombre : ")) print(10 / x) print("Fin du programme") except ValueError: print("Erreur")
Plus le bloc try contient d’instructions, plus il devient difficile d’identifier quelle ligne a provoqué l’erreur.

Mauvais ordre des except

try: x = int("abc") except: print("Erreur générale") except ValueError: print("Erreur de conversion")
Le premier except capture tout. Le second ne sera jamais exécuté. Les erreurs précises doivent être placées avant une erreur générale.

12. Synthèse

Voici les notions essentielles à retenir pour ce module.

try

  • code risqué
  • test d’un bloc

except

  • erreur capturée
  • erreur précise

else / finally

  • else : si tout va bien
  • finally : toujours exécuté

Cas fréquents

  • ValueError
  • FileNotFoundError
  • ZeroDivisionError
  • ConnectionRefusedError
Points clés à retenir :
try contient le code susceptible de provoquer une erreur.
except permet de gérer l’erreur.
else s’exécute seulement si aucune erreur n’a eu lieu.
finally s’exécute toujours.
Il vaut mieux capturer une erreur précise.