Une dépendance optionnelle est manquante. Une fonction est dépréciée. Une syntaxe n’est pas recommandée.
Il y a mieux qu’un print()
pour signaler ça à votre utilisateur.
import warnings # on definit quels types de warning on va afficher (a faire une seule fois) warnings.simplefilter("always") # et on affiche tous nos warning warnings.warn("La fonction je_vais_a_une_boom() est depreciee", DeprecationWarning) warnings.warn("Le module optionnel 'braces' n'est pas disponible", ImportWarning) # ne mettez pas de caracteres non ASCII, sinon ca chie ## /home/Sam/Bureau/test.py:8: DeprecationWarning: La fonction je_vais_a_une_boom() est depreciee ## warnings.warn("La fonction je_vais_a_une_boom() est depreciee", DeprecationWarning) ## /home/Sam/Bureau/test.py:9: ImportWarning: Le module optionnel 'braces' n'est pas disponible ## warnings.warn("Le module optionnel 'braces' n'est pas disponible", ImportWarning) |
L’avantage d’utiliser le module warning
est :
- Il affiche sur stderr automatiquement.
- Il affiche un format clair automatiquement (fichier, ligne, type de warning).
- On peut très vite lire le code source et voir ce qui déclenche un warning.
Mais surtout, on peut filtrer les warning:
warnings.simplefilter("type de filtrage") |
Le module permet de choisir ce qu’on affiche comme warning. Ils sont désactivables par la ligne de commande. Et surtout, quelqu’un qui importe votre module qui balance des warnings possède de nombreux moyens de les réduire au silence ou de les rediriger ailleurs. Par exemple :
with warnings.catch_warnings(record=True) as w: import test |
Vous trouverez ici un liste des warnings disponibles ainsi que les filtres possibles.
OK pour préférer warning à logging, mais tu préfères ça à un décorateur ?
Un décorateur ?
Je ne comprends pas.
Donnes-moi un exemple de ce que tu compares.
Pardon. Je pensais à quelque chose comme ça : http://code.activestate.com/recipes/577819-deprecated-decorator/
J’ai déjà croisé ça dans des codes et je me dis que c’est une solution concurrente à la tienne (mais je peux me tromper). Quels sont les bons et mauvais cotés ?
Merci.
Solution concurrente ? A ma solution ? J’ai pas proposé de solution, je présente un module. Module qui est utilisé dans le décorateur vers lequel tu link. Je pige pas le commentaire.
Mais bon snippet au demeurant. Activatestate est une bonne source en général.
Oui, d’accord. Bon, c’est pas grave, c’est peut être moi qui suis à coté de la plaque aujourd’hui :)
Il y a un équivalent à l’argument stacklevel pour les exceptions ? J’ai fouillé un peu sans rien trouver d’approchant. J’imagine que “explicite est mieux qu’implicite” et que donc on ne veut pas cacher la provenance exacte de l’exception, mais ça peut permettre de simplifier agréablement la longueur du traceback balancé à la gueule de l’utilisateur final.
Hello @kontre,
Je ne conprends pas la question (décidément c’est le fil rouge des comments :-)), de quelle situation parles-tu ? Peux-tu donner un exemple ?