HOWTO · Python

Supprimer les avertissements en Python

Ce tutoriel montre comment supprimer les avertissements dans les programmes en python.

Sur cette page

Pour supprimer les avertissements Python, choisissez la portée souhaitée : utilisez warnings.filterwarnings() dans un script, python -W ignore script.py pour un seul processus, ou définissez PYTHONWARNINGS=ignore avant de lancer Python. Vous pouvez aussi filtrer une catégorie d’avertissements ou utiliser un gestionnaire de contexte pour ne supprimer les messages que dans un bloc précis.

Les avertissements signalent des situations qui peuvent nécessiter votre attention, comme l’utilisation d’une API obsolète. À eux seuls, ils n’interrompent pas l’exécution. Les exceptions correspondent à des erreurs à l’exécution qui peuvent interrompre une opération ou se propager si elles ne sont pas prises en charge. Lisez un avertissement avant de le masquer : sa suppression peut dissimuler un problème de compatibilité qui comptera par la suite.

Supprimer les avertissements avec le module warnings

Le module standard warnings permet à un script de filtrer les messages. Appelez warnings.filterwarnings("ignore") pour ignorer largement les avertissements dans le processus, ou indiquez des critères, comme une catégorie ou un message, afin de cibler un sous-ensemble. Les filtres s’appliquent aux avertissements qui leur correspondent ; les autres restent visibles. Placez un filtre ciblé près du code concerné et retirez-le une fois le problème sous-jacent résolu.

Exécutez cet exemple autonome :

import warnings

warnings.filterwarnings("ignore", category=UserWarning, message="cache is stale")
warnings.warn("cache is stale", UserWarning)
print("program continues")
program continues

Le filtre correspond aux messages UserWarning qui commencent par le texte fourni ; l’avertissement correspondant est donc masqué. Le dernier affichage montre que l’exécution se poursuit après l’appel qui déclenche l’avertissement. Le libellé affiché, « program continues », reste en anglais dans l’exemple.

Pour appliquer un filtre temporaire, utilisez warnings.catch_warnings() et installez le filtre dans son bloc with. À la sortie du bloc, Python rétablit l’état des filtres d’avertissement qui était actif à son entrée. Cette méthode est utile autour d’une opération connue pour générer du bruit lorsque vous souhaitez que le reste du code conserve sa politique habituelle concernant les avertissements. Le modèle est par exemple with warnings.catch_warnings(): warnings.simplefilter("ignore", category=DeprecationWarning); operation(). Gardez l’opération dans le bloc ; les appels qui le suivent utilisent les filtres rétablis.

Supprimer les avertissements depuis la ligne de commande

Passez l’option -W de Python avant le nom du script pour définir un filtre d’avertissement au démarrage de l’interpréteur. Pour ignorer les avertissements dans ce processus, exécutez python -W ignore script.py ou sa forme compacte équivalente python -Wignore script.py. La forme protégée -Wignore correspond à l’option immédiatement suivie de l’action ignore. Remplacez script.py par le nom de votre fichier et conservez ensuite les éventuels arguments du script.

Cette option s’applique au démarrage de l’interpréteur et ne modifie pas le script. Elle est utile pour exécuter un outil que vous ne pouvez pas modifier ou pour un lancement ponctuel. Un filtre défini en ligne de commande peut masquer des informations de diagnostic utiles pendant toute l’exécution ; privilégiez donc un filtre limité à une catégorie si une suppression générale risque de cacher des informations dont vous avez besoin.

Supprimer les avertissements avec la variable d’environnement PYTHONWARNINGS

Définissez PYTHONWARNINGS avant de démarrer Python pour transmettre des actions de filtrage des avertissements au nouveau processus. Par exemple, dans un shell POSIX, utilisez PYTHONWARNINGS=ignore python script.py ; dans PowerShell, utilisez $env:PYTHONWARNINGS = "ignore", puis exécutez python script.py. Ces affectations dépendent du shell utilisé, et la variable doit être présente dans l’environnement au lancement de l’interpréteur.

Ce réglage est utile lorsque le processus est contrôlé par un lanceur ou un environnement de déploiement. Il s’applique aux processus Python démarrés avec cet environnement ; il ne modifie pas la politique d’avertissement d’un interpréteur déjà en cours d’exécution. Supprimez la variable ou définissez un filtre plus ciblé pour rendre les avertissements visibles à nouveau. Quelle que soit la méthode choisie, ne masquez que les messages que vous avez évalués et réexaminez le filtre lorsque les dépendances et les API évoluent.