Nombre de mises en garde en Python 2.4
-
22-09-2019 - |
Question
J'ai quelques tests qui ont besoin de compter le nombre d'avertissements soulevés par une fonction. En Python 2.6 est simple, en utilisant
with warnings.catch_warnings(record=True) as warn:
...
self.assertEquals(len(warn), 2)
Malheureusement, with
n'est pas disponible en Python 2.4, que pourrais-je utiliser? I ne peuvent pas simplement vérifier s'il y a eu un seul avertissement (en utilisant un filtre d'avertissement avec action='error'
et try
/ catch
), parce que le nombre d'avertissements est significatif.
La solution
Je voulais vous proposer la même solution que Ignacio, un peu plus complet exemple de code de test:
import warnings
def setup_warning_catcher():
""" Wrap warnings.showwarning with code that records warnings. """
caught_warnings = []
original_showwarning = warnings.showwarning
def custom_showwarning(*args, **kwargs):
caught_warnings.append(args[0])
return original_showwarning(*args, **kwargs)
warnings.showwarning = custom_showwarning
return caught_warnings
caught_warnings_list = setup_warning_catcher()
# trigger warning here
assert len(caught_warnings_list) == 1
Autres conseils
Qu'est-ce que vous pouvez faire est de reproduire le comportement de warnings.catch_warnings()
vous . Enregistrer la valeur actuelle de warnings.showwarning
et le remplacer par une fonction qui permet d'économiser l'avertissement dans une liste, puis après le test de routine de la longueur de la liste et puis restaurer warnings.showwarning
.
oldsw = warnings.showwarning
warnings.showwarning = myshowwarning
...
self.assertEquals(len(somewarninglist), 2)
warnings.showwarning = oldsw