Pour ajouter un peu de précision sur try / except, même si c'est vrai que c'est inutile dans ce contexte :
Pour entrer dans le bloc except, et donc capturer une exception, il faut lever une exception, ça se fait avec raise. Comparer des nombres, ça ne lève pas d'exception, ça renvoie juste un booléen (True ou False).
Si tu veux capturer une exception, tu peux faire une division par zéro dans le bloc try par exemple, ça c'est une opération qui lève une exception. Ou alors tu peux directement utiliser raise.
- Edité par LoupSolitaire 14 novembre 2018 à 18:42:54
Il y a tellement d'erreurs si peu de lignes que je préfère donner la correction tout de suite,
score = float(input("Enter Score: "))
if not 0 <= score <= 1.0:
print("Vous n'avez pas rentrer un nombre entre 0 et 1")
Je viens d'essayer ton programme, j'ai eu un message d'erreur :
ValueError: could not convert string to float: 'e'
Comme quoi utiliser une exception dans ce contexte ne me semble pas si bête.
Dans un programme récent, pour gérer un menu allant de 0 à n, j'ai écrit ce bout de programme :
# Saisie d'un nombre entre 0 et n (0 active le "undo").
while True :
choix = input("votre choix > ")
try :
rep = int(choix)
except : # rep n'existe pas
print("Erreur de saisie")
else : # rep est un entier, est-il entre 0 et n ?
if 0 <= rep <= n :
break
else :
print("Erreur de saisie")
JlCro : tu as vu, c'est la conversion en nombre qui va dans le bloc 'try', car c'est elle qui peut provoquer une exception (par exemple si l'utilisateur fait une faute de frappe et tape une lettre).
(Comme je débute, ce n'est sûrement pas parfait. Par exemple je sais que, plutôt qu'afficher le message d'erreur, il faudrait appeler 'raise', mais je ne maîtrise pas encore...)
Il y a tellement d'erreurs si peu de lignes que je préfère donner la correction tout de suite,
score = float(input("Enter Score: "))
if not 0 <= score <= 1.0:
print("Vous n'avez pas rentrer un nombre entre 0 et 1")
Je viens d'essayer ton programme, j'ai eu un message d'erreur :
ValueError: could not convert string to float: 'e'
Comme quoi utiliser une exception dans ce contexte ne me semble pas si bête.
Dans un programme récent, pour gérer un menu allant de 0 à n, j'ai écrit ce bout de programme :
# Saisie d'un nombre entre 0 et n (0 active le "undo").
while True :
choix = input("votre choix > ")
try :
rep = int(choix)
except : # rep n'existe pas
print("Erreur de saisie")
else : # rep est un entier, est-il entre 0 et n ?
if 0 <= rep <= n :
break
else :
print("Erreur de saisie")
JlCro : tu as vu, c'est la conversion en nombre qui va dans le bloc 'try', car c'est elle qui peut provoquer une exception (par exemple si l'utilisateur fait une faute de frappe et tape une lettre).
(Comme je débute, ce n'est sûrement pas parfait. Par exemple je sais que, plutôt qu'afficher le message d'erreur, il faudrait appeler 'raise', mais je ne maîtrise pas encore...)
- Edité par robun il y a environ 1 heure
Ce que j'ai présenté n'est qu'une partie du code par rapport à la ligne 5 où le try-except est inutile. Là où le try-except est utile est lors du cast float.
Autre manière de faire,
while True:
try:
score = float(input("Enter Score: "))
except ValueError:
print("Erreur")
continue
if not 0 <= score <= 1.0:
print("Vous n'avez pas rentrer un nombre entre 0 et 1")
else:
break
print(score)
Préciser l'exception est important, tu pourrais cacher une autre exception et avoir des difficultés à débugger car except rendrait cela transparent.
Préciser l'exception est important, tu pourrais cacher une autre exception et avoir des difficultés à débugger car except rendrait cela transparent.
Je le comprends et c'est en effet un autre progrès que je dois faire. Il faut être capable d'anticiper les exceptions possibles (et bien comprendre à quoi elles correspondent...)
Préciser l'exception est important, tu pourrais cacher une autre exception et avoir des difficultés à débugger car except rendrait cela transparent.
Je le comprends et c'est en effet un autre progrès que je dois faire. Il faut être capable d'anticiper les exceptions possibles (et bien comprendre à quoi elles correspondent...)
Tu peux t'appuyer sur le tutoriel officiel traduit et qui t'aideras à y comprendre les mécanismes, même si pour un débutant python, ça peut être difficile à appréhender, ça l'est moins pour un expérimenté du développement
Il ne faut pas non-plus chercher à gérer les exceptions à tout prix !
Typiquement dans le cas présent, la conversion d'une saisie de l'utilisateur en un nombre à virgule flottante, on a pas besoin de gérer les exceptions autres que celles liées à la valeur que représente la chaîne de caractères saisie par l'utilisateur : ValueError. Et exceptionnellement dans le cas d'un float on peut aussi gérer une OverflowError si l'utilisateur entre un nombre trop grand.
Mais il est généralement hors de propos de gérer une EOFError, qui peut se produire selon le contexte d'exécution du programme (flux standard non-bloquant) ou si l'utilisateur appui sur CTRL+D ou CTRL+Z. Ça pourrait même être dangereux si une RuntimeError était passée sous silence...
Il y a des exceptions qui doivent mettre un terme au programme et être rapportées à l'utilisateur et/ou aux développeurs sans corrompre le traceback, d'autres qui peuvent être passée sous silence et d'autres qu'il faut gérer. C'est pour cette raison qu'il faut toujours préciser l'exception à gérer ou à passer sous silence.
Étant débutant le tuto officiel mais encore hors de portée en tout cas j ai bien compris vos solutions.
Python exception
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Bonne journée...
Blond, bouclé, toujours le sourire aux lèvres...
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
Bonne journée...
Bonne journée...