Eh bien, je ne suis pas beaucoup d'un programmeur python, mais je dirais que la réponse est "OUI".
Tout langage dynamique qui vous permet de créer une variable avec un nom à tout moment, pourrait utiliser une "stricte" pragma.
Stricte vars (une des options pour le strict en Perl, 'use strict' tourne tous à la fois) en Perl exige que toutes les variables sont déclarées avant leur utilisation. Ce qui signifie que ce code:
my $strict_is_good = 'foo';
$strict_iS_good .= 'COMPILE TIME FATAL ERROR';
Génère une erreur fatale au moment de la compilation.
Je ne sais pas de manière à obtenir Python pour rejeter ce code au moment de la compilation:
strict_is_good = 'foo';
strict_iS_good += 'RUN TIME FATAL ERROR';
Vous obtiendrez une exception d'exécution qu' strict_iS_good
n'est pas défini. Mais uniquement lorsque le code est exécuté. Si votre suite de tests n'a pas 100% de couverture, vous pouvez facilement l'envoi de ce bug.
Tout le temps, je travaille dans une langue qui n'ont pas ce problème (PHP par exemple), je suis nerveuse. Je ne suis pas un parfait dactylo. Un simple, mais difficile à repérer, faute de frappe peut causer votre code à l'échec d'une manière qui peut être difficile à traquer.
Donc, pour résumer, OUI Python pourrait utiliser une "stricte" pragma pour activer la compilation des contrôles pour des choses qui peuvent être vérifiés au moment de la compilation. Je ne peux pas penser à d'autres vérifications à ajouter, mais un meilleur programmeur Python pourrait probablement penser à certains.
Remarque , je me concentre sur la pragmatique de l'effet de stict vars en Perl, et je suis abstraction de certains détails. Si vous voulez vraiment connaître tous les détails, voir le perldoc strict.
Mise à jour: des Réponses à certains commentaires
Jason Baker : Statique pions comme pylint sont utiles. Mais elles représentent une étape supplémentaire, ce qui peut être et est souvent ignorée. Le renforcement de certaines vérifications de base dans le compilateur garantit que ces contrôles sont effectués régulièrement. Si ces contrôles sont contrôlables par un pragma, même l'objection concernant le coût des contrôles devient inutile.
popcnt : je sais que python génère une exception. Je l'ai dit plus. Je préconise moment de la compilation, la vérification de la mesure du possible. Merci de relire le post.
mpeters : Pas d'ordinateur, l'analyse de code pouvez trouver toutes les erreurs--ce qui revient à résoudre le problème de l'arrêt. Pire, pour trouver les fautes de frappe dans les affectations, votre compilateur aurait besoin de connaître vos intentions et de trouver des endroits où vos intentions diffèrent à partir de votre code. C'est assez clairement impossible.
Toutefois, cela ne signifie pas qu'aucune vérification ne doit être fait. Si il y a des classes de problèmes qui sont faciles à détecter, alors il est logique de les piéger.
Je ne suis pas assez familier avec pylint et pychecker-à-dire que les classes d'erreurs, ils l'attraper. Comme je l'ai dit je suis très inexpérimenté avec python.
Ces analyse statique de programmes sont utiles. Cependant, je crois que, si on double les capacités de la compilation, le compilateur va toujours être dans une position de "savoir" en savoir plus sur le programme de toute vérification statique pourrait. Il semble un gaspillage de ne pas prendre avantage de cette de réduire les erreurs, si possible.
Mise à jour 2:
cdleary - En théorie, je suis d'accord avec vous, un analyseur statique ne peut faire de la validation, le compilateur peut. Et dans le cas de Python, il devrait être suffisant.
Toutefois, si votre compilateur est assez complexe (surtout si vous avez beaucoup de pragmas changer la manière dont la compilation se produit, ou si comme Perl, vous pouvez exécuter du code lors de la compilation), alors l'analyseur statique doit s'approcher de la complexité du compilateur/interpréteur de faire l'analyse.
Heh, tous ce que parler de complexe de compilateurs et d'exécuter du code lors de la compilation montre mon Perl arrière-plan.
Ma compréhension est que Python n'a pas pragmas et ne peut pas exécuter du code arbitraire au moment de la compilation. Donc, à moins que je me trompe ou ces fonctionnalités sont ajoutées, relativement simple analyseur dans l'analyseur statique devrait suffire. Il serait certainement utile de force de ces contrôles à chaque exécution. Bien sûr, je ferais c'est avec un pragma.
Une fois que vous ajoutez des pragmas pour le mélange, vous avez commencé à descendre une pente glissante, et la complexité de vous l'analyseur doit croître en proportion de la puissance et de la souplesse que vous fournissez dans votre pragmas. Si vous n'êtes pas prudent, vous pouvez retrouver comme Perl, puis "seulement python peut analyser Python," a l'avenir, je ne veux pas voir.
Peut-être un commutateur de ligne de commande serait une meilleure façon d'ajouter forcé l'analyse statique ;)
(En aucune façon l'intention d'attaquer de Python capacités quand je dis qu'il ne peut pas futz avec compilation comportement comme Perl. J'ai l'intuition que c'est une conception soigneusement réfléchie décision, et je vois de la sagesse en elle. Perl extrême flexibilité au moment de la compilation est, à mon humble avis, une grande force et d'une terrible faiblesse de la langue; je vois de la sagesse dans cette approche.)