Saisir une note et rattraper les erreurs de saisie
RésoluRobin -
Bonjour,
Voici un code que j'ai commencé (seulement je ne comprends pas pourquoi il ne marche pas)
En effet, le but du programme est que l'utilisateur rentre sa note d'oral (pour pouvoir faire des calculs plus tard), seulement, je souhaite que si la donnée saisie par l'utilisateur est une chaîne ou une note au dessus de 20 ou en dessous de 0, cela lui mette " Erreur, veuillez recommencer" jusqu'à ce qu'il saisisse un nombre entre 1 et 20.
Merci d'avance

Android / Chrome 103.0.0.0
- Saisir une note et rattraper les erreurs de saisie
- Rech. ou saisir l'url - Guide
- Saisie vocale whatsapp - Accueil - Messagerie instantanée
- Saisie vocale sms - Guide
- Saisie automatique - Guide
- Liste deroulante excel avec saisie semi-automatique - Guide
3 réponses
Bonjour,
Comme soulignés par les messages de jee pee et Whismeril merci de copier coller ton code et de le mettre en forme avec des balises de code, c'est plus pratique pour tout le monde et plus écologique.
Pour préciser la réponse de jee pee, un bloc try...except sert à rattraper des exceptions. Le bloc except est exécuté si une exception est rattrapée. Il existe différents types d'exception, et dans ton code, deux fonctions peuvent en lever :
- input peut une exception KeyboardInterrupt si tu fais ctrl c
- int peut lever une exception ValueError si tu saisis une valeur qui n'est pas un entier (nombre flottant, chaîne de caractère...)
Le bloc try doit envelopper du code susceptible de lever une exception (ce qui n'est pas ton cas), sans quoi le(s) bloc(s) except correspont(s) n'ont aucune chance d'être traversé(s).
Un bloc try...except peut comporter plusieurs bloc try...except pour réagir en fonction de l'exception qui a été levée.
- Si une exception est levée, mais qu'elle n'est pas rattrapée, alors le programme s'interrompt et python affiche l'exception qui a été levée (et depuis où).
- Si dans le bloc except, tu ne précises pas le type de l'exception rattrapée, alors ce bloc except les rattrape toutes. C'est généralement une mauvaise idée car il y certaines exceptions que tu ne veux surtout pas rattraper (en l'occurrence, rattraper un ctrl c est une mauvaise idée car cela empêcherait l'utilisateur d'interrompre facilement ton programme).
Voici à quoi pourrait ressembler ton code une fois corrigé :
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys note = None while note is None: try: note = int(input("Note (0-20) ? ")) if not (0 <= note <= 20): raise RuntimeError("Note invalide (ce doit être un entier compris entre 0 et 20)") except ValueError: print(f"Vous devez saisir un entier !", file=sys.stderr) except RuntimeError as e: print(e, file=sys.stderr) note = None except KeyboardInterrupt: print("Au revoir !") sys.exit(1) print(f"La note saisie est {note}")
Note que le bloc KeyboardInterrupt est mis là "pour le fun", pour démonter que ce genre d'exception peut se rattraper.
Résultat :
Note (0-20) ? -2
Note invalide (ce doit être un entier compris entre 0 et 20)
Note (0-20) ? 22
Note invalide (ce doit être un entier compris entre 0 et 20)
Note (0-20) ? 10.2
Vous devez saisir un entier !
Note (0-20) ? 3
La note saisie est 3
Bonne chance
Bonjour,
Si tu veux que le try teste la réponse chaine avec erreur il faut mettre l'input après le try.
Sur le forum, plutot qu'une image il est préférable de mettre le code avec le bouton code, à cote du bouton image.
Bonjour
ici un petit tuto sur la bonne façon de poster un code https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code