Python - 13.13 Gérer les erreurs de saisie avec une fonction récursive

Un utilisateur peut saisir des lettres au lieu d'un chiffre, ou un nombre hors des limites prévues. Le programme doit alors le signaler et redemander la saisie. Cette leçon regroupe ce contrôle dans une fonction dédiée, réutilisable pour tous les choix.

Isoler la saisie dans une fonction

La fonction reçoit le minimum et le maximum autorisés. Elle renvoie la réponse seulement lorsqu'elle est correcte.

Séparer ce contrôle du reste du programme évite de répéter le même test. Si d'autres choix sont ajoutés, la fonction continue de fonctionner.

Traiter les erreurs de conversion

La conversion avec int() échoue si l'utilisateur saisit des lettres. Le bloc try et except permet d'intercepter cette erreur au lieu de bloquer le programme.

Si la saisie ne convient pas, un message demande d'entrer uniquement des chiffres compris entre les bornes.

def demander_reponse(mini, maxi):
    try:
        reponse = int(input())
        if mini <= reponse <= maxi:
            return reponse
    except ValueError:
        pass
    print('Veuillez entrer un chiffre compris entre ' + str(mini) + ' et ' + str(maxi))
    return demander_reponse(mini, maxi)

Redemander la saisie avec la récursivité

Quand la réponse n'est pas valide, la fonction s'appelle elle-même avec les mêmes bornes. C'est ce qu'on appelle une fonction récursive.

La redemande s'arrête dès que l'utilisateur saisit une réponse correcte. Le programme peut alors continuer son déroulement.

En résumé

Une fonction peut contrôler la saisie et ne renvoyer qu'une réponse valide. Un bloc try et except intercepte les lettres saisies à la place de chiffres. La récursivité redemande la réponse tant qu'elle n'est pas correcte.

Points clés

  • Une fonction peut centraliser le contrôle de la saisie.
  • int() génère une erreur si la saisie contient des lettres.
  • try et except gèrent l'erreur sans arrêter le programme.
  • Une saisie hors bornes doit aussi être refusée.
  • La fonction s'appelle elle-même tant que la réponse n'est pas valide.

Questions fréquentes

Qu'est-ce qu'une fonction récursive ?

C'est une fonction qui s'appelle elle-même. Ici, elle se rappelle tant que la saisie ne convient pas.

Pourquoi utiliser try et except ?

La conversion en nombre peut échouer. Le bloc except intercepte cette erreur pour afficher un message au lieu d'arrêter le programme.

Pourquoi passer le minimum et le maximum en paramètres ?

Ces bornes sont transmises à chaque nouvel appel. La vérification reste donc la même à chaque tentative.