Saisir une note et rattraper les erreurs de saisie
Résolu/Fermé- Saisir une note et rattraper les erreurs de saisie
- Rech. ou saisir l'url - Guide
- Saisie vocale sms - Guide
- Saisie vocale whatsapp - Accueil - Messagerie instantanée
- Redmi note 13 5g test - Accueil - Téléphones
- Saisie automatique - Guide
3 réponses
Modifié le 18 juil. 2022 à 14:36
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
Modifié le 14 juil. 2022 à 19:33
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