Warning technique à un autre développeur en Python 9


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.

9 thoughts on “Warning technique à un autre développeur en Python

Leave a comment

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.