Quelle est la différence entre warnings.warn()
y logging.warn()
en termes de rôle et d'utilisation ?
Notez que "n'apparaître qu'une seule fois" est le comportement par défaut prévu, mais les filtres d'avertissement peuvent le modifier.
Quelle est la différence entre warnings.warn()
y logging.warn()
en termes de rôle et d'utilisation ?
Je suis d'accord avec l'autre réponse -- logging
est destiné à l'enregistrement et warning
est un avertissement, mais j'aimerais ajouter plus de détails.
Voici un tutoriel qui vous guidera à travers les étapes de l'utilisation de la fonction logging
module. https://docs.python.org/3/howto/logging.html
Il répond directement à votre question :
warnings.warn() dans le code de la bibliothèque si le problème peut être évité et que l'application client est en mesure de le résoudre. l'application cliente doit être modifiée pour éliminer l'avertissement
logging.warning() s'il n'y a rien que l'application cliente puisse faire la situation, mais l'événement doit tout de même être noté
logging.warning
enregistre juste quelque chose au WARNING
de la même manière que logging.info
des journaux à l'adresse INFO
et logging.error
des journaux à l'adresse ERROR
niveau. Il n'a pas de comportement particulier.
warnings.warn
émet un Warning
qui peut être imprimé à l'adresse suivante stderr
ou ignoré complètement, ou encore jeté comme un objet normal. Exception
(ce qui risque de faire planter votre application), en fonction de la nature précise de la Warning
émise et la façon dont vous avez configuré votre sous-classe Filtre d'avertissements . Par défaut, les avertissements sont imprimés sur stderr
ou ignorés.
Avertissements émis par warnings.warn
sont souvent utiles à connaître, mais faciles à manquer (surtout si vous exécutez un programme Python dans un processus en arrière-plan et que vous n'avez pas capturé stderr
). C'est pourquoi il peut être utile de les consigner.
Python fournit une intégration intégrée entre le logging
et le module warnings
pour vous permettre de le faire ; il suffit d'appeler logging.captureWarnings(True)
au début de votre script et tous les avertissements émis par la fonction warnings
sera automatiquement enregistré au niveau WARNING
.
En plus de la explication canonique dans la documentation officielle
warnings.warn() dans le code de la bibliothèque si le problème peut être évité et que l'application cliente doit être modifiée pour éliminer l'avertissement
logging.warning() si l'application cliente ne peut rien faire pour remédier à la situation, mais que l'événement doit tout de même être noté
Il convient également de noter que, par défaut, le système warnings.warn("same message")
n'apparaîtra qu'une seule fois. Il s'agit là d'une différence notable. Citation de document officiel
Les répétitions d'un avertissement particulier pour le même emplacement de la source sont généralement supprimées.
import warnings warnings.warn("foo") main:1: UserWarning: foo warnings.warn("foo") warnings.warn("foo")
import logging logging.warn("bar") WARNING:root:bar logging.warn("bar") WARNING:root:bar logging.warn("bar") WARNING:root:bar
warnings.warn("fur") main:1: UserWarning: fur warnings.warn("fur") warnings.warn("fur")
L'une d'entre elles lève une exception qui peut être levée ou ignorée, et l'autre ajoute optionnellement une entrée dans le journal en fonction du niveau de journalisation actuel. L'une doit être utilisée lorsque l'on est averti de diverses choses dans le code, et l'autre doit être utilisée lors de la journalisation.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
4 votes
En cette réponse : "logging.warn est obsolète depuis Python 3.3 et vous devriez utiliser logging.warning."