2017-09-21 1 views
0

J'ai un test Python qui génère potentiellement plusieurs avertissements. Lorsque le test se termine, je souhaite qu'il déclenche une exception s'il y a des avertissements.Attendre les avertissements Python et déclencher une exception

Il est important d'exécuter le test jusqu'à la fin, puis de le relancer, car j'utilise un bot de génération à distance et je souhaite voir tous les avertissements en même temps.

Comment faire cela?

+0

Utilisez-vous le module d'avertissement? https://docs.python.org/3.6/library/warnings.html?highlight=warnings#module-warnings – WombatPM

+0

Oui, mais je l'ai trouvé pas si facile à trouver. –

Répondre

0

J'ai demandé cela hier, mais j'ai trouvé la réponse plus tard, seul. La technique est intéressante et je veux la partager.

Lorsqu'un module crée des avertissements avec le module d'avertissement, il stocke ces avertissements dans une variable spéciale contenant les avertissements affichés. Donc, dans mon cas, le module analyseur émet des avertissements. J'ai simplement laissé faire son travail habituel, et à la fin du test vient:

if hasattr(parser, "__warningregistry__"): 
    raise RuntimeError("There are errors, see above.") 

De cette façon, je n'ai pas modifier mon analyseur en aucune façon, mais à la fin de la course, je obtenir une exception, et j'ai tous les avertissements disponibles. Ensuite, je peux corriger tous les cas et commencer une autre course du bot de construction.