J'ai ce bout de code, j'ai levé une exception, mais je m'étonne de voir pourquoi le code continue de tourner alors même que cette dernière lève une exception.
Lors des tests dans l'interpréteur, le rentre volontairement une année négative, une erreur est bien levée cependant j'ai le résultat qui ressort et m'indique qu'il s'agit d'une année non bissextile par exemple. Est ce bien comme cela qu'une exception doit fonctionner?
année = input("e;veuillez saisir une année: "e;)
try:
année = int(année)
if année <= 0:
raise ValueError("e;L'année saisie est négative ou nulle"e;)
except ValueError:
print('Erreur lors de la conversion de l'année')
if année % 400 == 0 or (année % 4 == 0 and année % 100 !=0):
print("e;Bisextile"e;)
else:
print("e;Non Bisextile"e;)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Alain Ketterlin
zeuwi writes:
J'ai ce bout de code, j'ai levé une exception, mais je m'étonne de voir pourquoi le code continue de tourner alors même que cette dernière lève une exception. Lors des tests dans l'interpréteur, le rentre volontairement une année négative, une erreur est bien levée cependant j'ai le résultat qui ressort et m'indique qu'il s'agit d'une année non bissextile par exemple. Est ce bien comme cela qu'une exception doit fonctionner?
La clause "except" traite/intercepte l'exception, il sert Í cela. L'exception est donc interceptée, et le code se poursuit normalement. C'est exactement ce qui doit se passer.
try: année = int(année) if année <= 0: raise ValueError("e;L'année saisie est négative ou nulle"e;) except ValueError: print('Erreur lors de la conversion de l'année')
Le traitement de ton exception consiste ici Í afficher un message (puis Í continuer comme si de rien n'était). Ce n'est presque jamais une bonne idée. Si tu ne veux pas intercepter l'exception : enlève try et sa clause except (et aussi print). Si tu veux afficher un message et "re-déclencher" l'exception, utilise except ValueError: print (...) raise Tu peux aussi donner explicitement un nom Í l'exception except ValueError as e: print (...) raise e Dans ce cas, le message sera affiché par print, et la suite du code ne sera pas exécutée (jusqu'Í ce qu'un autre bloc try/except intercepte l'exception). Dans ton cas, tu veux manifestement ne pas faire le calcul en cas d'erreur. Le code devrait être année = input("e;veuillez saisir une année: "e;) try: année = int(année) if année <= 0: raise ValueError("e;L'année saisie est négative ou nulle"e;) if année % 400 == 0 or (année % 4 == 0 and année % 100 !=0): print("e;Bisextile"e;) else: print("e;Non Bisextile"e;) except ValueError: print('Erreur lors de la conversion de l'année') J'ai laissé ces saloperies de '"e;' mais ça serait bien que tu nous les épargnes. (Ou alors est-ce juste chez moi ?)
J'ai ce bout de code, j'ai levé une exception, mais je m'étonne de
voir pourquoi le code continue de tourner alors même que cette
dernière lève une exception. Lors des tests dans l'interpréteur, le
rentre volontairement une année négative, une erreur est bien levée
cependant j'ai le résultat qui ressort et m'indique qu'il s'agit d'une
année non bissextile par exemple. Est ce bien comme cela qu'une
exception doit fonctionner?
La clause "except" traite/intercepte l'exception, il sert Í cela.
L'exception est donc interceptée, et le code se poursuit normalement.
C'est exactement ce qui doit se passer.
try:
année = int(année)
if année <= 0:
raise ValueError("e;L'année saisie est négative ou nulle"e;)
except ValueError:
print('Erreur lors de la conversion de l'année')
Le traitement de ton exception consiste ici Í afficher un message (puis
Í continuer comme si de rien n'était). Ce n'est presque jamais une bonne
idée.
Si tu ne veux pas intercepter l'exception : enlève try et sa clause
except (et aussi print).
Si tu veux afficher un message et "re-déclencher" l'exception, utilise
except ValueError:
print (...)
raise
Tu peux aussi donner explicitement un nom Í l'exception
except ValueError as e:
print (...)
raise e
Dans ce cas, le message sera affiché par print, et la suite du code ne
sera pas exécutée (jusqu'Í ce qu'un autre bloc try/except intercepte
l'exception).
Dans ton cas, tu veux manifestement ne pas faire le calcul en cas
d'erreur. Le code devrait être
année = input("e;veuillez saisir une année: "e;)
try:
année = int(année)
if année <= 0:
raise ValueError("e;L'année saisie est négative ou nulle"e;)
if année % 400 == 0 or (année % 4 == 0 and année % 100 !=0):
print("e;Bisextile"e;)
else:
print("e;Non Bisextile"e;)
except ValueError:
print('Erreur lors de la conversion de l'année')
J'ai laissé ces saloperies de '"e;' mais ça serait bien que tu nous les
épargnes. (Ou alors est-ce juste chez moi ?)
J'ai ce bout de code, j'ai levé une exception, mais je m'étonne de voir pourquoi le code continue de tourner alors même que cette dernière lève une exception. Lors des tests dans l'interpréteur, le rentre volontairement une année négative, une erreur est bien levée cependant j'ai le résultat qui ressort et m'indique qu'il s'agit d'une année non bissextile par exemple. Est ce bien comme cela qu'une exception doit fonctionner?
La clause "except" traite/intercepte l'exception, il sert Í cela. L'exception est donc interceptée, et le code se poursuit normalement. C'est exactement ce qui doit se passer.
try: année = int(année) if année <= 0: raise ValueError("e;L'année saisie est négative ou nulle"e;) except ValueError: print('Erreur lors de la conversion de l'année')
Le traitement de ton exception consiste ici Í afficher un message (puis Í continuer comme si de rien n'était). Ce n'est presque jamais une bonne idée. Si tu ne veux pas intercepter l'exception : enlève try et sa clause except (et aussi print). Si tu veux afficher un message et "re-déclencher" l'exception, utilise except ValueError: print (...) raise Tu peux aussi donner explicitement un nom Í l'exception except ValueError as e: print (...) raise e Dans ce cas, le message sera affiché par print, et la suite du code ne sera pas exécutée (jusqu'Í ce qu'un autre bloc try/except intercepte l'exception). Dans ton cas, tu veux manifestement ne pas faire le calcul en cas d'erreur. Le code devrait être année = input("e;veuillez saisir une année: "e;) try: année = int(année) if année <= 0: raise ValueError("e;L'année saisie est négative ou nulle"e;) if année % 400 == 0 or (année % 4 == 0 and année % 100 !=0): print("e;Bisextile"e;) else: print("e;Non Bisextile"e;) except ValueError: print('Erreur lors de la conversion de l'année') J'ai laissé ces saloperies de '"e;' mais ça serait bien que tu nous les épargnes. (Ou alors est-ce juste chez moi ?)
Cdt,
Sans commentaire. -- Alain.
Olivier Miakinen
Le 28/12/2021 Í 16:52, Alain Ketterlin a écrit :
J'ai laissé ces saloperies de '"e;' mais ça serait bien que tu nous les épargnes. (Ou alors est-ce juste chez moi ?)
Ce n'est ni toi ni zeuwi qui êtes responsable de ces saloperies de '"e;', c'est la saloperie de site giganews qui en est responsable quand il rend visible un groupe usenet comme si c'était un forum giganews. -- Olivier Miakinen
Le 28/12/2021 Í 16:52, Alain Ketterlin a écrit :
J'ai laissé ces saloperies de '"e;' mais ça serait bien que tu nous les
épargnes. (Ou alors est-ce juste chez moi ?)
Ce n'est ni toi ni zeuwi qui êtes responsable de ces saloperies de
'"e;', c'est la saloperie de site giganews qui en est responsable
quand il rend visible un groupe usenet comme si c'était un forum
giganews.
J'ai laissé ces saloperies de '"e;' mais ça serait bien que tu nous les épargnes. (Ou alors est-ce juste chez moi ?)
Ce n'est ni toi ni zeuwi qui êtes responsable de ces saloperies de '"e;', c'est la saloperie de site giganews qui en est responsable quand il rend visible un groupe usenet comme si c'était un forum giganews. -- Olivier Miakinen
Alain Ketterlin
Olivier Miakinen <om+ writes:
Ce n'est ni toi ni zeuwi qui êtes responsable de ces saloperies de '"e;', c'est la saloperie de site giganews qui en est responsable quand il rend visible un groupe usenet comme si c'était un forum giganews.
Merci pour l'info. Encourageons donc les utilisateurs de giganews Í changer de crèmerie. Personnellement j'utilise nntp.aioe.org. -- Alain.
Olivier Miakinen <om+news@miakinen.net> writes:
Ce n'est ni toi ni zeuwi qui êtes responsable de ces saloperies de
'"e;', c'est la saloperie de site giganews qui en est responsable
quand il rend visible un groupe usenet comme si c'était un forum
giganews.
Merci pour l'info. Encourageons donc les utilisateurs de giganews Í
changer de crèmerie. Personnellement j'utilise nntp.aioe.org.
Ce n'est ni toi ni zeuwi qui êtes responsable de ces saloperies de '"e;', c'est la saloperie de site giganews qui en est responsable quand il rend visible un groupe usenet comme si c'était un forum giganews.
Merci pour l'info. Encourageons donc les utilisateurs de giganews Í changer de crèmerie. Personnellement j'utilise nntp.aioe.org. -- Alain.