2010-01-22 5 views
9
#!/usr/bin/python 
str = "this" 
if(1): 
    print "Hi" 
else: 
    print str.any_random_function() 

Ceci n'échoue pas lorsque j'exécute le programme. J'ai essayé py_compile mais cela n'indiquait pas non plus l'erreur dans la boucle 'else'. Maintenant, comment puis-je compiler le programme et détecter les erreurs de manière fiable dans le code python?Comment puis-je vérifier les erreurs de compilation en python?

Merci.

+4

Je ne pense pas que ce soit possible en python. Les méthodes peuvent être ajoutées de manière dynamique, l'exception capturée ou la méthode __getattr__ surchargée. Dans tous ces cas, votre erreur dépendra totalement des informations d'exécution. – fserb

+0

En fait, cet exemple particulier devrait être attrapé par pylint. – Geo

+1

Il ne manque pas parce que ce n'est pas faux. Votre module pourrait être importé dans un contexte où 'any_random_function' est correctement défini pour la classe de chaînes intégrée. –

Répondre

5

Je pense que votre meilleur pari serait pylint.

2

Python est un langage dynamique, vous ne pouvez donc pas simplement vérifier la présence d'erreurs de compilation comme dans les langages statiques (C/C++/Java). Si vous affectez str.any_random_function, le code ci-dessus serait correct (d'accord, c'est un mauvais exemple ...).

Je vous suggère d'utiliser PyDev for Eclipse qui trouve automatiquement de nombreux problèmes courants dans votre code, comme des fonctions/modules manquants, etc. Il prend également en charge pylint (facultatif).

+0

Il est facile pour un keystore aléatoire d'ajouter un caractère à un appel de fonction. Alors est-il suggéré d'exécuter pylint dans toute la base de code ou d'avoir des tests unitaires et une couverture de code de 100% pour attraper cet appel de fonction erroné? Merci pour les réponses. – stacka

+0

Il faut un certain temps pour s'habituer à pylint et cela peut produire beaucoup de messages (inutiles) s'ils ne sont pas configurés correctement. Quoi qu'il en soit, en tant que bon ingénieur logiciel, vous devriez toujours viser une couverture de 100% en utilisant des tests unitaires. L'avantage est qu'ils peuvent être exécutés (semi-) automatiquement - les messages pylint doivent être interprétés par des humains. – AndiDog

+0

Je suggère fortement les tests unitaires aussi. –

Questions connexes