Tu écris un programme Python et soudain, c'est le drame : ValueError, ZeroDivisionError, FileNotFoundError... Les erreurs font partie de la vie de tout programmeur. Mais savais-tu qu'en NSI, tu dois non seulement les comprendre, mais aussi apprendre à les gérer proprement ? C'est tout l'enjeu des exceptions Python NSI et de la structure try except. Dans cet article, on t'explique tout : ce qu'est une exception, comment l'attraper, comment la lever, et pourquoi c'est essentiel pour le bac. Prêt à transformer tes bugs en force ? C'est parti !
Qu'est-ce qu'une exception en Python ?
En Python, une exception est un événement qui se produit lorsqu'une erreur est détectée pendant l'exécution du programme. Contrairement aux erreurs de syntaxe (que Python repère avant même de lancer le code), les exceptions surviennent à l'exécution, quand le programme est déjà en train de tourner. Si tu ne les gères pas, le programme s'arrête brutalement et affiche une traceback (la pile d'appels).
Le programme NSI insiste beaucoup sur cette notion : tu dois savoir reconnaître les exceptions courantes, anticiper les situations à risque et écrire du code robuste. Par exemple, une division par zéro, un fichier introuvable, une conversion de texte en entier qui échoue... autant de cas où une exception peut être levée.
Les exceptions les plus fréquentes
ValueError: la valeur ne convient pas (ex.int("abc")).TypeError: opération entre types incompatibles (ex.1 + "a").ZeroDivisionError: division par zéro.IndexError: indice hors des limites d'une liste.KeyError: clé absente dans un dictionnaire.FileNotFoundError: fichier inexistant.
Tu retrouveras ces exceptions dans de nombreux exercices sur nsi-lycee.fr. Les connaître, c'est déjà la moitié du travail !
Comment gérer une exception avec try except ?
La structure try except est la brique de base de la gestion des erreurs en Python. Elle permet d'essayer un bloc de code et de capturer l'exception s'il y en a une, pour réagir sans faire planter tout le programme.
Syntaxe générale :
try:
# code susceptible de lever une exception
except TypeDException:
# code exécuté si cette exception est levée
Tu peux aussi ajouter else (exécuté si aucune exception) et finally (exécuté dans tous les cas). Voici un exemple complet :
try:
num = int(input("Entrez un nombre : "))
resultat = 10 / num
except ValueError:
print("Ce n'est pas un nombre valide.")
except ZeroDivisionError:
print("Division par zéro impossible.")
else:
print("Résultat :", resultat)
finally:
print("Fin du programme.")
Ici, si l'utilisateur tape "abc", une ValueError est levée et le message correspondant s'affiche. S'il tape 0, c'est ZeroDivisionError. Sinon, le résultat s'affiche. Dans tous les cas, le finally s'exécute.
Attraper plusieurs exceptions
Tu peux grouper plusieurs exceptions dans un même except :
except (ValueError, ZeroDivisionError):
print("Erreur de saisie ou division par zéro.")
Ou utiliser un except Exception générique pour tout attraper, mais attention : c'est souvent considéré comme une mauvaise pratique car tu risques de masquer des bugs. Préfère des exceptions précises.
Lever une exception : le mot-clé raise
Parfois, tu voudras toi-même signaler une erreur dans ton code. C'est là qu'intervient raise. Tu peux lever une exception existante ou en créer une personnalisée.
Exemple :
def racine_carree(x):
if x < 0:
raise ValueError("Le nombre doit être positif.")
return x ** 0.5
Si tu appelles racine_carree(-4), une ValueError est levée avec un message clair. Tu peux ensuite l'attraper avec try except.
Tu peux aussi définir tes propres exceptions en héritant de Exception :
class MonErreur(Exception):
pass
raise MonErreur("Quelque chose s'est mal passé")
C'est utile pour créer des erreurs métier spécifiques à ton application.
Cas d'usage concret : un formulaire de saisie robuste
Imagine un programme qui demande à l'utilisateur de saisir son âge et de le stocker dans un fichier. Sans gestion d'erreurs, le programme planterait à la moindre saisie invalide. Avec try except, il devient robuste :
def demander_age():
while True:
try:
age = int(input("Quel est votre âge ? "))
if age < 0:
raise ValueError("L'âge ne peut pas être négatif.")
return age
except ValueError as e:
print(f"Erreur : {e}. Réessayez.")
age = demander_age()
print(f"Âge enregistré : {age}")
Ce code boucle jusqu'à obtenir une saisie valide. C'est exactement le genre de situation que tu pourrais rencontrer en projet NSI ou en exercice. Pour t'entraîner, va voir les exercices Python sur nsi-lycee.fr.
Autre cas classique : la lecture de fichier. Si le fichier n'existe pas, open() lève FileNotFoundError. Tu peux gérer ça proprement :
try:
with open("donnees.txt", "r") as f:
contenu = f.read()
except FileNotFoundError:
print("Fichier introuvable. Vérifiez le chemin.")
Conseils de méthode et lien avec le bac NSI
Pour réussir les questions sur les exceptions au bac, adopte ces réflexes :
- Identifie les points de fragilité : saisie utilisateur, division, accès à un fichier, indice de liste.
- Choisis l'exception la plus précise possible : évite
except Exceptionsauf raison valable. - Documente tes erreurs : un message clair aide au débogage.
- Teste tes cas limites : que se passe-t-il si l'utilisateur entre 0, -1, une chaîne vide ?
Le programme officiel de NSI demande explicitement de savoir « gérer les erreurs et les exceptions ». Cela tombe régulièrement à l'écrit comme à l'oral (Grand Oral). Tu peux t'entraîner avec des annales ou des exercices corrigés sur nsi-lycee.fr.
Pour approfondir, n'hésite pas à consulter des ressources complémentaires comme Allolycée qui propose des fiches de révision, ou Allobac pour des conseils méthodologiques.
Conclusion
Les exceptions Python ne sont pas tes ennemies : ce sont des outils puissants pour écrire du code fiable. Avec try except, raise et les bonnes pratiques, tu peux anticiper les erreurs et rendre tes programmes plus professionnels. Alors, la prochaine fois qu'une exception surgit, ne panique pas : attrape-la ! Et pour aller plus loin, explore notre cours dédié aux erreurs en Python. Bon code et bonne réussite en NSI !
