1. Les exceptions : distinction entre erreur de syntaxe et erreur d’exécution

Une erreur de syntaxe (SyntaxError) empêche l’interpréteur de démarrer car le code viole la grammaire formelle du langage. Une exception d’exécution survient au contraire pendant le déroulement d’un programme syntaxiquement valide : fichier introuvable (FileNotFoundError), division impossible (ZeroDivisionError), ou type inadapté (TypeError).

2. Le bloc complet try / except / else / finally

Python fournit un mécanisme structuré d’interception d’exceptions permettant de rattraper les anomalies sans crasher le système :

def lire_donnees_fichier(chemin: str) -> str:
    fichier = None
    try:
        fichier = open(chemin, "r", encoding="utf-8")
        contenu = fichier.read()
    except FileNotFoundError as err:
        print(f"Erreur d'accès : le fichier {chemin} n'existe pas.")
        return ""
    except PermissionError:
        print("Erreur de droits : lecture interdite sur ce fichier.")
        return ""
    else:
        # Exécuté uniquement si aucune exception n'a été levée
        print("Lecture achevée avec plein succès.")
        return contenu
    finally:
        # Exécuté systématiquement, idéal pour libérer les ressources
        if fichier and not fichier.closed:
            fichier.close()

3. Définir des exceptions personnalisées

Dans un projet d’envergure, hériter de la classe de base Exception permet de créer des erreurs métiers explicites facilitant le diagnostic des pannes et l’auditabilité du système.

Synthèse pédagogique : Ne masquez jamais une erreur par un bloc except Exception: pass silencieux. Une panne non signalée est une anomalie critique différée.