web-dev-qa-db-fra.com

Pourquoi les exceptions Python sont-elles nommées "Erreur"?

Pourquoi les exceptions Python sont-elles nommées "Erreur" (par exemple, ZeroDivisionError, NameError, TypeError) et non pas "Exception" (par exemple, ZeroDivisionException, NameException, TypeException).

Je viens d’un milieu Java et j’ai commencé à apprendre Python récemment, ce qui est source de confusion car il existe une distinction entre les erreurs et les exceptions.

Y at-il une différence en Python également ou non?

62
Elena
  1. Vous ne nommez pas chaque classe avec 'Class' dans le nom et chaque variable avec '_variable' dans le nom. Le même nom que vous ne nommez pas exception en utilisant le mot "Exception". Le nom devrait dire quelque chose sur la signification de l'objet. "Erreur" est le sens de la plupart des exceptions.

  2. Toutes les exceptions ne sont pas des erreurs. SystemExit, KeyboardInterrupt, StopIteration, GeneratorExit sont toutes des exceptions et non des erreurs. Le mot "Erreur" dans les erreurs réelles montre la différence.

  3. "Erreur" est plus court que "Exception". Than peut enregistrer quelques caractères dans la largeur du code sans perte de signification. Cela fait une différence. 

74
Jacek Konieczny

Je crois que cette convention provient de PEP 8 - Style Guide pour le code Python :

Noms d'exception

Comme les exceptions doivent être des classes, la convention de nommage de classe S'applique ici. Toutefois, vous devez utiliser le suffixe "Erreur" sur vos noms d’exception (Si l’exception est réellement une erreur).

42
daotoad

Python est assez similaire à Java à cet égard. Mais Exception de Python doit être comparé à Throwable de Java. 

Comme Throwables se présente sous toutes sortes de formes - Erreur, RuntimeException et Exception (cochée) -, il en va de même pour Python (bien qu'aucune exception ne soit cochée).

En ce qui concerne le langage, une erreur est exceptionnelle, de sorte que la hiérarchie d'héritage n'est pas étrange.

Je n'aime pas particulièrement le nom Exception cependant. Les exceptions ne sont pas utilisées uniquement dans des circonstances exceptionnelles (comme des erreurs, espérons-le), mais aussi pour sortir du contrôle. Parce que c'est ce que fait une exception; il saute hors du flux de contrôle normal vers un point marqué. Un peu comme un goto, mais plus raffiné.

Cela dit, chaque fois que vous rencontrez une situation dans laquelle aucune valeur de retour appropriée ne peut être trouvée, vous avez tendance à utiliser une exception. Tant en Python qu'en Java. 

8
extraneon

Q. Pourquoi les exceptions Python sont-elles nommées "Erreur"?

Je suppose que c'est parce que la plupart les exceptions Python sont classées comme suit: errors ou warnings . Si les noms des exceptions Python devaient se terminer par Exception, cette distinction ne serait pas possible.

Des exemples d'avertissements sont DeprecationWarning et ImportWarning.

Veuillez consulter la hiérarchie la classe 2.x pour les exceptions intégrées ainsi que celle pour 3.x .

4
DavidRR

C'est juste nommer. En Java, vous avez Java.lang.Error distinct des autres Throwables car ces types d’erreurs doivent être décochés. En Python, toutes les exceptions sont décochées, la distinction est donc inutile.

1
gustafc

En termes simples:

  • Les exceptions Python NE SONT PAS nommées "Erreur".
  • Les erreurs Python sont nommées "Erreur".
  • Les erreurs Python peuvent être levées, interceptées et traitées comme des exceptions.
  • Quelque chose qui commence par une erreur peut devenir une exception gérée qui ne génère pas de message d'erreur.
  • Un Exception peut également être élevé directement

Concept:

Je fais normalement cette chose mais je vais faire une exception

OU

Ce serait normalement une erreur, mais nous allons faire une exception, l'attraper et effectuer une procédure.

Détails:

Exceptions vs Erreurs:

https://docs.python.org/2/tutorial/errors.html

Les erreurs détectées pendant l'exécution sont appelées exceptions et ne sont pas fatales Sans condition.

Flux de travail:

  • Le programme surveille les erreurs.
  • Si une erreur se produit mais qu'elle n'est PAS détectée par le programme lors de l'exécution, un message d'erreur est généré.
  • Si une erreur survient et est détectée par le programme lors de l'exécution, il s'agit d'une exception.
  • Les exceptions peuvent être traitées par le programme. Ils peuvent être traités avec élégance ou donner lieu à un message d'erreur.
  • Les exceptions qui ne sont PAS gérées par le programme sont les exceptions non gérées (non capturées) et deviennent des messages d'erreur.
0
Xavier