Python 5.5 : Exercice : Gérer l’entrée invalide

Cet exercice porte sur la robustesse de notre programme. Actuellement, si l'utilisateur tape autre chose qu'un nombre valide, le programme plante car int() lève une ValueError. L'objectif est de gérer ce cas d'erreur proprement et de redemander à l'utilisateur tant qu'il n'a pas entré un nombre valide.

Validation avec try / except et boucle

La solution combine deux mécanismes : une boucle while qui continue tant que la saisie n'est pas valide, et un bloc try / except qui rattrape l'erreur de conversion sans planter. Voici la correction :

def demander_nombre(nombre_min, nombre_max):
							    reponse = 0
							    while reponse == 0:
							        reponse_str = input(
							            f"Quel est le nombre magique entre {nombre_min} et {nombre_max} ? "
							        )
							        try:
							            reponse = int(reponse_str)
							        except ValueError:
							            print("Vous devez entrer un nombre valide")
							    return reponse

On initialise reponse à zéro. Tant qu'elle reste à zéro, on continue à demander la saisie. Si l'utilisateur tape un nombre valide, int() réussit et reponse prend cette valeur, ce qui fait sortir de la boucle. S'il tape n'importe quoi, int() lève une ValueError, le except la rattrape, on affiche un message d'erreur, et on recommence.

Les bonnes pratiques de gestion d'erreur :

  • Anticiper les saisies utilisateur invalides
  • Utiliser try / except pour rattraper les erreurs prévisibles
  • Préférer une boucle plutôt qu'un crash brutal
  • Donner un message clair à l'utilisateur
  • Ne jamais ignorer silencieusement une exception

Cette approche transforme un programme fragile en programme robuste. C'est exactement ce qu'on attend d'un logiciel de qualité : prévoir l'imprévu et réagir gracieusement aux erreurs de saisie. À très bientôt pour la prochaine vidéo sur la validation des bornes nombre_min et nombre_max.

En résumé

Cet exercice enseigne comment améliorer un programme en ajoutant la gestion des entrées invalides. Plutôt que de laisser le programme planter quand l'utilisateur entre quelque chose qui n'est pas un nombre, on utilise une boucle while pour redemander une saisie jusqu'à obtenir une entrée convertible. L'objectif est de créer un programme robuste qui guide l'utilisateur à entrer des données au bon format.

Points clés

  • Gestion des erreurs de conversion : détecter quand une chaîne ne peut pas être convertie en nombre
  • Utilisation d'une boucle while pour mettre en place une validation persistante de l'entrée utilisateur
  • Message d'erreur instructif : communiquer clairement à l'utilisateur que seuls les nombres sont acceptés
  • Boucle infinie contrôlée : continuer à demander jusqu'à obtenir une saisie valide
  • Amélioration de l'expérience utilisateur : éviter les crashes et guider l'interaction

Questions fréquentes

Pourquoi utiliser une boucle while pour valider l'entrée plutôt que d'autres structures de contrôle ?

La boucle while permet de créer une demande répétée jusqu'à ce que la condition soit satisfaite. Tant que l'utilisateur entre une valeur invalide, la boucle continue à redemander, ce qui est idéal pour la validation d'entrée.

Comment distinguer une entrée valide d'une entrée invalide en Python ?

Une entrée est valide si elle peut être convertie en nombre sans lever d'exception. On utilise try/except pour capturer l'erreur de conversion et signaler que l'entrée est invalide si celle-ci échoue.

Quel est le rôle du message d'erreur dans cette validation ?

Le message d'erreur guide l'utilisateur en lui indiquant explicitement quel format d'entrée est attendu (un nombre). Cela améliore l'expérience utilisateur et rend le programme plus convivial et moins frustrant.