68 votes

Pourquoi affirmer n'est pas largement utilisé?

J'ai trouvé python instruction assert est un bon moyen d'attraper des situations qui ne devraient jamais se produire. Et peut être retirée en python optimisation lorsque le code est digne de confiance.

Il semble être un parfait mécanisme pour exécuter des applications python en mode de débogage. Mais en regardant plusieurs python projets comme django, tordu et zope, il est presque jamais utilisé. Alors, pourquoi cela se produit?

Pourquoi affirme états n'est pas largement utilisé dans la communauté python?

73voto

Ferdinand Beyer Points 27723

Je suppose que la raison principale pour assert pas utilisé le plus souvent est que personne ne l'utilise Python "optimisé" mode.

Les assertions sont un excellent outil pour détecter les erreurs de programmation, pour vous protéger de situations inattendues, mais tout cela vérification d'erreur a un coût. Dans les langages compilés comme le C/C++, ce n'est pas vraiment important, car les assertions sont activé uniquement en mode de débogage.

En Python, d'autre part, il n'y a pas de distinction stricte entre debug et release mode. L'interprète dispose d'une "option d'optimisation" (-O), mais actuellement, ce n'est pas réellement optimiser le byte code, mais ne supprime affirme.

Par conséquent, la plupart Python il suffit de les ignorer l' -O drapeau et d'exécuter leurs scripts en mode "normal", qui est le genre de la mode debug depuis les assertions sont activés et __debug__ est True, mais est considéré comme "prêt pour la production".

Peut-être qu'il serait plus sage pour passer de la logique, c'est à dire, "optimiser" par défaut et ne l'activer affirme explicitement le mode de débogage, mais je suppose que ce serait confondre un grand nombre d'utilisateurs et je doute que nous verrons jamais un tel changement.

37voto

John Mee Points 12004

Plusieurs raisons viennent à l'esprit...

Ce n'est pas la fonction principale d'

De nombreux programmeurs, permet de ne pas s'enliser par le raisonnement, le mépris de tout ce qui n'est pas un participant direct dans le programme de l'avant-dernière fonctionnalité. L'instruction assert est destiné à des fins de débogage et de test, et donc, un luxe qu'ils ne peuvent pas se permettre.

Les Tests Unitaires

L'instruction assert est antérieure à la montée en puissance des tests unitaires. Alors que l'instruction assert encore a ses usages, de tests unitaires est maintenant largement utilisé pour la construction d'un environnement hostile, qui bash la merde hors d'un sous-programme et de son système. Dans ces conditions, affirmer états commencent à se sentir comme des couteaux dans un échange de coups de feu.

L'amélioration de l'industrie de respect pour les tests

L'instruction assert sert le mieux en tant que dernière ligne de défense. Il a atteint le haut et intouchable hauteurs sous le langage C, lorsque cette langue gouverné le monde, comme un excellent moyen de mettre en œuvre la d'un nouveau genre sur la défensive "programmation"; il reconnaît et les pièges de catastrophes dans le moment où ils vaciller sur le point de disparaître. C'était avant que la valeur de Test est devenu largement reconnu et respecté, et les catastrophes sont nettement plus commun.

Aujourd'hui, c'est du jamais vu, pour tout sérieux logiciel commercial à être publié sans une certaine forme de test. Le test est pris au sérieux et a évolué en un immense champ. Il y a des professionnels de l'analyse et de l'Assurance de la Qualité ministères avec de grandes listes de contrôle et des approbations officielles. Dans ces conditions, les programmeurs ont tendance à ne pas s'embêter avec l'affirme parce qu'ils ont confiance que leur code sera soumis à tellement fastidieux essais que les chances de wacky bord de la catastrophe conditions sont si éloignées que d'être négligeable. Cela ne veut pas dire qu'ils ont raison, mais si le blâme pour la programmation différée peut être déplacé vers le service d'assurance qualité, de l'enfer, pourquoi pas?

14voto

Michael Pratt Points 781

Je ne suis pas l'auteur de l'un de ces projets, donc c'est juste une supposition basée sur mes propres expériences. Sans directement demander aux gens dans ces projets, vous ne recevrez pas de réponse concrète.

Affirmer, c'est formidable quand vous êtes à essayer de faire le débogage, etc dans votre propre application. Comme indiqué dans le lien que vous avez fourni, cependant, à l'aide d'une condition est meilleure lorsque l'application pourrait être en mesure de prévoir et de les récupérer à partir d'un état. Je n'ai pas utilisé de zope, mais à la fois Tordu et Django, leurs applications sont en mesure de récupérer et continuer de beaucoup d'erreurs dans votre code. Dans un sens, ils ont déjà "compilée" les affirmations puisqu'ils peuvent les manipuler.

Une autre raison, liée à cela, c'est que souvent les applications à l'aide de bibliothèques externes tels que ceux que vous avez énumérés voulez peut-être faire la gestion des erreurs. Si la bibliothèque utilise simplement des affirmations, quelle que soit l'erreur, il déclenche une AssertionError. Avec un conditionnel, les bibliothèques peuvent réellement lancer utile erreurs qui peuvent être détectés et gérés par votre application.

1voto

user1415926 Points 77

J'ai trouvé un bon article sur ce sujet:

https://mail.python.org/pipermail/python-list/2013-November/660401.html

cela m'a été très utile de préciser quand utiliser des assertions en python.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X