1. Gestion des Erreurs avec try...except
Le Problème : Que se passe-t-il si votre code rencontre une situation inattendue ? Par exemple, si vous demandez à l'utilisateur un nombre et qu'il tape du texte. Le code age = int(input("Entrez votre âge: ")) plantera avec une ValueError.
La Solution : Le bloc try...except permet d'anticiper ces erreurs.
Analogie : C'est comme un filet de sécurité pour un acrobate. Le bloc try représente la figure risquée. Si l'acrobate tombe, le filet (le bloc except) l'attrape et le spectacle peut continuer.
try:
age = int(input("Entrez votre âge: "))
print(f"L'année prochaine, vous aurez {age + 1} ans.")
except ValueError:
print("Erreur : Veuillez entrer un nombre valide.")
Si l'utilisateur entre du texte, le programme n'échouera plus, mais affichera un message d'erreur clair.
2. Manipulation de Fichiers
Interagir avec des fichiers est une tâche courante. Python rend cela très simple.
La Bonne Pratique : with open(...)
La meilleure manière de travailler avec des fichiers est d'utiliser le mot-clé with. Il garantit que le fichier sera automatiquement fermé à la fin du bloc, même si une erreur se produit.
Écrire dans un Fichier
lignes = ["Première ligne.", "Deuxième ligne.", "Troisième ligne."]
# 'w' signifie write (écrire). Attention, cela écrase le fichier s'il existe.
with open('mon_fichier.txt', 'w', encoding='utf-8') as f:
for ligne in lignes:
f.write(ligne + '\n') # \n pour un saut de ligne
print("Fichier écrit avec succès !")
Lire depuis un Fichier
print("Lecture du fichier :")
try:
# 'r' signifie read (lire)
with open('mon_fichier.txt', 'r', encoding='utf-8') as f:
for ligne in f:
# .strip() enlève les espaces et sauts de ligne inutiles
print(ligne.strip())
except FileNotFoundError:
print("Erreur : Le fichier n'a pas été trouvé.")
En utilisant with open(), votre code est plus sûr et plus propre.
Exercices Pratiques
Exercice 1 : Calculatrice Robuste
Reprenez la calculatrice de l'exercice du Module 2. Modifiez-la pour qu'elle gère deux types d'erreurs : une entrée non numérique (ValueError) et une division par zéro (ZeroDivisionError).
Voir la solution
def calculatrice_robuste():
try:
num1 = float(input("Entrez le premier nombre : "))
num2 = float(input("Entrez le second nombre : "))
resultat = num1 / num2
print(f"Le résultat de {num1} / {num2} est {resultat:.2f}")
except ValueError:
print("Erreur : Veuillez entrer des nombres valides.")
except ZeroDivisionError:
print("Erreur : La division par zéro est impossible.")
if __name__ == "__main__":
calculatrice_robuste()
Exercice 2 : Journal d'Événements
Créez une fonction log(message) qui ajoute une ligne à un fichier journal.log. Chaque ligne doit commencer par la date et l'heure actuelles. Le fichier ne doit pas être écrasé à chaque appel.
Voir la solution
import datetime
def log(message):
"""Ajoute un message avec horodatage à la fin du fichier journal.log."""
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_entry = f"[{timestamp}] - {message}\n"
# 'a' signifie append (ajouter)
with open('journal.log', 'a', encoding='utf-8') as f:
f.write(log_entry)
if __name__ == "__main__":
log("Démarrage de l'application.")
log("Une opération importante a été effectuée.")
log("Arrêt de l'application.")
print("Les événements ont été enregistrés dans journal.log")
Exercice 3 : Compteur de Mots dans un Fichier
Écrivez un programme qui demande le nom d'un fichier à l'utilisateur, lit son contenu, et affiche le nombre total de mots qu'il contient. Le programme doit gérer le cas où le fichier n'existe pas (FileNotFoundError).
Voir la solution
def compter_mots():
nom_fichier = input("Entrez le nom du fichier à analyser (ex: mon_fichier.txt) : ")
try:
with open(nom_fichier, 'r', encoding='utf-8') as f:
contenu = f.read()
mots = contenu.split()
print(f"Le fichier '{nom_fichier}' contient {len(mots)} mots.")
except FileNotFoundError:
print(f"Erreur : Le fichier '{nom_fichier}' n'a pas été trouvé.")
except Exception as e:
print(f"Une erreur inattendue est survenue : {e}")
if __name__ == "__main__":
compter_mots()