Le quartierPY PythonPièce 5/7Intermédiaire

Fichiers, exceptions et JSON

Lire et écrire des fichiers avec with open, gérer les erreurs avec try et except, et sauvegarder des données au format JSON.

Ce que tu vas apprendre

  • Lire et écrire un fichier texte sans risquer de le laisser ouvert.
  • Intercepter une erreur avec try et except au lieu de planter.
  • Enregistrer et recharger un dictionnaire au format JSON.

Écrire un fichier

On ouvre un fichier avec open(). Le mot-clé with garantit qu'il est refermé à la fin du bloc, même en cas d'erreur.

with open("courses.txt", "w", encoding="utf-8") as f:
    f.write("farine\n")
    f.write("oeufs\n")

Le deuxième argument est le mode : "w" écrit en effaçant le contenu existant, "a" ajoute à la fin, "r" lit. Le mode par défaut est la lecture.

encoding="utf-8" évite les problèmes avec les accents. Le \n marque un retour à la ligne.

Lire un fichier

with open("courses.txt", "r", encoding="utf-8") as f:
    for ligne in f:
        print(ligne.strip())

Le fichier se parcourt ligne par ligne avec for. strip() retire le retour à la ligne de fin. Pour tout récupérer d'un coup, f.read() renvoie un seul texte.

Le chemin "courses.txt" est relatif au dossier d'où tu lances python, pas à celui du script. Le module pathlib offre une manière plus sûre de construire des chemins.

Les exceptions

Quand quelque chose échoue, Python lève une exception et arrête le programme. Essaie de lire un fichier absent :

open("inconnu.txt")

Python s'arrête avec une erreur FileNotFoundError. Le nom de l'exception dit ce qui s'est passé : lis toujours la dernière ligne du message.

try et except

Un bloc try tente une action, et except réagit si une exception précise survient.

try:
    with open("recettes.txt", encoding="utf-8") as f:
        contenu = f.read()
except FileNotFoundError:
    print("Le fichier n'existe pas encore")
    contenu = ""

Le programme continue au lieu de planter. Nomme toujours l'exception attendue : un except: seul masquerait aussi tes vraies erreurs.

Saisie invalide

Reprenons le int(input()) du premier cours. Une saisie incorrecte lève une ValueError.

try:
    portions = int(input("Portions ? "))
except ValueError:
    print("Entre un nombre entier")
    portions = 4

Quelques exceptions courantes :

ExceptionCause typique
ValueErrorValeur du bon type mais inutilisable (int("abc")).
TypeErrorOpération sur un mauvais type ("a" + 1).
KeyErrorClé absente d'un dictionnaire.
IndexErrorIndice hors de la liste.
FileNotFoundErrorFichier introuvable.

else, finally et raise

Deux clauses facultatives complètent try. else s'exécute si aucune exception n'a eu lieu, finally s'exécute dans tous les cas.

try:
    portions = int("4")
except ValueError:
    print("Invalide")
else:
    print("Conversion réussie")
finally:
    print("Terminé")

Pour signaler toi-même une erreur, utilise raise :

def diviser_recette(portions):
    if portions <= 0:
        raise ValueError("Il faut au moins une portion")
    return 1 / portions

Sauvegarder en JSON

Le JSON est un format texte pour échanger des données, très répandu sur le web. Le module json convertit un dictionnaire en JSON et inversement.

import json

recette = {"nom": "Crêpes", "portions": 4}

with open("recette.json", "w", encoding="utf-8") as f:
    json.dump(recette, f, ensure_ascii=False, indent=2)

with open("recette.json", encoding="utf-8") as f:
    relue = json.load(f)
print(relue["nom"])

json.dump écrit, json.load lit. indent=2 rend le fichier lisible et ensure_ascii=False garde les accents tels quels. Le programme affiche « Crêpes ».

À retenir

  • with open(chemin, mode, encoding="utf-8") as f: ouvre un fichier et le referme tout seul.
  • Les modes courants sont "r" (lire), "w" (écrire en effaçant) et "a" (ajouter).
  • try tente une action, except NomErreur la rattrape ; nomme toujours l'exception.
  • else suit un try réussi, finally s'exécute dans tous les cas, raise lève une erreur.
  • json.dump et json.load sauvegardent et rechargent un dictionnaire.

Pour aller plus loin

Sources officielles

Ensuite

Projet
Lignes de code
Niveau
Le quartier
Appartement
Python
Pièce
5/7
Plan n°
python/05.fichiers-et-exceptions
Lignes de code · fiches rédigées à partir des documentations officielles, sources citées en bas de chaque page.