2010-03-18 6 views
1

J'ai écrit un module python. En cours d'exécution python filename.py, vérifie uniquement les erreurs de syntaxe. Y at-il un outil qui vérifie les erreurs d'exécution aussi, comme concaténer int avec string etc ..Python: recherche des erreurs d'exécution

Merci
Bala

Mise à jour: Les scripts sont principalement sur la configuration d'un cluster Hadoop dans le nuage . Je ne sais pas comment je peux écrire un test unitaire, parce que tout fonctionne dans le nuage. Vous pouvez considérer le code comme un code hérité, et j'ai ajouté quelques enregistrements supplémentaires et quelques conditions supplémentaires.

Répondre

2

Traditionnellement, si vous n'écrivez pas de tests unitaires et/ou de tests complets (écrire beaucoup de tests est bien sûr la meilleure pratique!), On doit au moins mettre dans chaque module une fonction def main(): pour l'exercer et terminer la module avec

if __name__ == '__main__': 
    main() 

donc main() n'obtenir de la manière si est juste d'importer le module, mais il exécutera si vous exécutez le module comme votre script principal. Bien sûr, vous devez réellement exercer le code dans le module depuis main(), pour que cela prenne toutes sortes de problèmes sémantiques tels que l'erreur de type que vous mentionnez - faire un travail vraiment approfondi de cette façon est souvent aussi difficile que d'écrire une unité réelle tests et tests de doc seraient, mais vous pouvez au moins commencer!

+0

Je pense que main devrait appeler test() parce que j'ai vu des gens faire ceci: import xyz; xyz.test() –

+0

Ou plutôt: 'if __name__ == '__main__': test()' –

+0

Je préfère utiliser uniformément le nom 'main' pour la fonction principale qui est exécutée quand un module est invoqué comme script principal, quel qu'il soit son but (test à l'ancienne ou autre), mais je n'ai jamais vu ce problème spécifique abordé dans un guide de style. –

2

Vous pouvez écrire un test unitaire pour votre module. De cette façon, il exécutera votre code et toutes les erreurs d'exécution (ou mieux encore, les échecs de test) seront signalés.

Si vous choisissez de descendre cette route, http://docs.python.org/library/unittest.html serait probablement un bon point de départ. Alternativement, comme Alex l'a écrit, vous pouvez simplement mettre du code au bas de votre module qui sera exécuté lorsque le module est exécuté directement. C'est plus pratique et probablement une meilleure première approche, mais si vous avez beaucoup de modules, vous voudrez peut-être une approche plus structurée.

+0

Les scripts concernent principalement la mise en place d'un cluster hadoop dans le cloud. Je ne sais pas comment je peux écrire un test unitaire, parce que tout fonctionne dans le nuage. Vous pouvez considérer le code comme du code hérité, et j'ai simplement ajouté plus de journalisation et quelques conditions supplémentaires à quelques endroits. – Boolean