1.5 Projet : Le Safe Opener
Appliquons notre savoir pour créer une lecture de fichier robuste.
1. Pathlib : L'approche moderne
On utilise Pathlib pour manipuler les fichiers comme des objets.
2. Gestion d'erreurs : Le bloc complet
Pour ĂȘtre ""Fail Fast", nous utilisons try / except / else / finally.
import pathlib
import logging
def load_scan_file(file_path: str) -> str:
"""Ouvre un fichier et renvoie son contenu ou une chaĂźne vide."""
try:
path = pathlib.Path(file_path)
return path.read_text(encoding="utf-8")
except FileNotFoundError:
logging.error("Fichier introuvable.")
return ""
except Exception as e:
logging.error(f"Erreur inattendue : {e}")
return ""
finally:
# Toujours exécuté (utile pour fermer des ressources complexes)
pass
def main():
print("--- pyCycloneFlow : Safe Opener ---")
# 1. On charge le fichier
raw_content = load_scan_file("scanner.txt")
print(raw_content)
if __name__ == "__main__":
main()
Résultat attendu :
--- pyCycloneFlow : Safe Opener ---
ERROR:root:Fichier introuvable.
Projet Fil Rouge : Votre premier Test
Créez tests/test_opener.py et validez votre code :
import unittest
from main import load_scan_file
class TestOpener(unittest.TestCase):
def test_file_not_found(self):
# Utilisation de la notation pointée recommandée
result = load_scan_file("inconnu.txt")
self.assertEqual(result, "")
if __name__ == "__main__":
unittest.main()
Lancer le test dans votre environnement (venv): python -m unittest tests.test_opener (sansle .py)
Résultat attendu :
ERROR:root:Fichier introuvable.
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK