Python: différence entre ValueError et d'Exception?
J'essaie de comprendre quelle est la différence entre élever un ValueError et une Exception. J'ai essayé les deux dans le même code (même dans la même direction), et le résultat était le même - j'ai un message d'erreur.
J'ai fait une recherche sur cette question, mais n'a trouvé aucune discussion sur ce point. Puis j'ai lu la documentation des exceptions, et constaté ce qui suit définition de ValueError:
Soulevée lors de la intégré dans le fonctionnement ou la fonction reçoit un argument qui a le bon type, mais une valeur inappropriée, et la situation n'est pas décrite par une plus précise exception comme
IndexError
.
Donc, comme je le comprends, une Exception est un terme plus général, et ValueError peut être appliquée dans certains cas spécifiques. Mais comme les résultats de la levée de ces deux choses sont les mêmes, je veux comprendre, quelle est la signification pratique de la différenciation entre un ValueError et une Exception. Une version de Python devrait être ici n'est pas pertinent. Merci!!!!
MODIFIER:
Grâce à vos réponses je l'ai eu, quelle est la différence entre les deux termes dans essayez-exception construire. Mais comment font-ils diffèrent en cas de juste lever, de ne pas l'exception?
raise Exception('blah')
et
raise ValueError('blah')
Répondre à @PeterWood: dans les deux cas, je viens de recevoir le message d'erreur "bla", mais dans un cas, il a été "Exception: blablabla", et dans le second: "ValueError: bla". Et je vois, dans ce cas, aucune différence pratique entre les deux.
"le résultat est le même - j'ai un message d'erreur."
J'ai édité ma question, veuillez jeter un oeil à elle.
OriginalL'auteur vlad.rad | 2017-04-25
Vous devez vous connecter pour publier un commentaire.
ValueError
hérite deException
. Vous pouvez décider de piège, soit seulementValueError
, ouException
, c'est ce que l'exception de l'héritage est pour.Dans cet exemple:
exception est interceptée, toutes les exceptions (sauf
BaseException
exceptions) sont piégés par laexcept
déclaration.Dans cet autre exemple:
Ici, l'exception n'est PAS coincé (
TypeError
n'est pasValueError
et de ne pas hériter)Vous utilisez le plus souvent des exceptions spécifiques à piège que ceux qui sont susceptibles de se produire (le meilleur exemple est
IOError
lors de la manipulation de fichiers), et de laisser le reste non interceptée. Le danger d'attraper toutes les exceptions est d'obtenir un morceau de code qui ne plante pas, mais ne fait rien.(modification de la réponse en réponse à votre edit:) lorsqu'on soulève une exception: vous êtes à la création d'une instance de
Exception
qui sera filtré par les futursexcept ValueError:
consolidés. le message est différent parce que la représentation de l'exception (lors de l'impression) comprend le nom de la classe exception.except OSError as err:
pour trouver l'exemple que je fais allusion).Fabre Merci pour votre réponse, je l'obtiens. Et si je ne suis pas l'exception ValueError ou d'Exception, mais de l'élever? Regarder veuillez à le Modifier à ma question.
OriginalL'auteur Jean-François Fabre
Vous l'avez dit, ValueError est une Exception spécifique. Un court exemple :
Si vous changez de "hello world" avec un int, print int(42), vous ne soulèvera pas l'exception.
Vous pouvez voir doc sur les exceptions ici.
OriginalL'auteur Nicolas Flores