Qual è la differenza tra warnings.warn() e logging.warn() in termini di cosa fanno e come dovrebbero essere utilizzati?Python warnings.warn() vs. logging.warning()
risposta
Si genera un'eccezione che può essere rilevata o ignorata come desiderato e l'altra aggiunge facoltativamente una voce al registro in base al livello di registrazione corrente. Si dovrebbe usare uno quando si avverte di varie cose nel codice, e l'altro dovrebbe essere usato durante la registrazione.
Sono d'accordo con l'altra risposta - logging
è per la registrazione e warning
è per avviso - ma vorrei aggiungere ulteriori dettagli.
Ecco un HOWTO in stile tutorial che illustra le fasi dell'utilizzo del modulo logging
. http://docs.python.org/2/howto/logging.html
risponde direttamente alla tua domanda:
warnings.warn() nel codice di libreria se il problema è evitabile e l'applicazione client deve essere modificato per eliminare l'avviso
logging.warning() se non c'è niente l'applicazione client può fare per la situazione, ma l'evento dovrebbe comunque essere notato
logging.warning
registra semplicemente qualcosa al livello WARNING
, allo stesso modo che i registri logging.info
al livello INFO
e i registri logging.error
al livello ERROR
. Non ha un comportamento speciale.
warnings.warn
emette un Warning
, che può essere stampato stderr
, ignorato completamente, o gettato come un normale Exception
(potenzialmente crash dell'applicazione) a seconda del preciso Warning
sottoclasse emessa e come hai configurato il tuo Avvertenze Filter. Per impostazione predefinita, gli avvisi verranno stampati su stderr
o ignorati.
Le avvertenze emesse da warnings.warn
sono spesso utili da conoscere, ma facili da perdere (specialmente se si sta eseguendo un programma Python in un processo in background e non si acquisisce stderr
). Per questo motivo, può essere utile averli registrati. Python fornisce un'integrazione integrata tra il modulo logging
e il modulo warnings
per consentirvi di farlo; basta chiamare logging.captureWarnings(True)
all'inizio del copione e tutti gli avvisi emessi dal modulo warnings
verranno registrati automaticamente al livello WARNING
.
Oltre al canonical explanation in official documentation
warnings.warn() nel codice di libreria se il problema è evitabile e l'applicazione client deve essere modificato per eliminare l'avviso
logging.warning() se non c'è niente l'applicazione client può fare per la situazione, ma l'evento dovrebbe essere ancora notato
E 'anche interessante notare che, per impostazione predefinita warnings.warn("same message")
verranno visualizzati solo una volta. Questa è una differenza notevole notevole.Citato da official doc
Le ripetizioni di un avviso particolare per la stessa posizione di origine sono in genere soppresse.
>>> 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")
>>>
- 1. Python vs Iron Python
- 2. Boo vs C# vs Python?
- 3. python 2.7 vs python 3.1
- 4. Django Abstract Models vs simple Python mixins vs Python ABC
- 5. python eval vs ast.literal_eval vs JSON decode
- 6. C++ vs Python precisione
- 7. Python descrittore vs proprietà
- 8. Python: bytearray vs array
- 9. Python vs velocità PHP
- 10. Python: repr vs backquote
- 11. Set vs set python
- 12. Python hasattr vs getattr
- 13. Python "string_escape" vs "unicode_escape"
- 14. Python os.pipe vs multiprocessing.Pipe
- 15. Python - calendar.timegm() vs. time.mktime()
- 16. Python: 'import *' vs execfile
- 17. Python str.translate VS str.replace
- 18. Python: os.path.exists vs os.path.isdir
- 19. python -c vs Python - << heredoc
- 20. Python pop() vs pop (0)
- 21. Python setup.py sviluppare vs installare
- 22. Classi Python: Ereditarietà vs Istanziazione
- 23. Python Django vs ASP.NET MVC
- 24. assertEquals vs. assertEqual in python
- 25. Formattazione stringa Python:% vs concatenazione
- 26. Julia Dataframes vs Python panda
- 27. wget Vs urlretrieve of python
- 28. Python: terminologia 'classe' VS 'tipo'
- 29. Attributi Python Class vs. Module
- 30. Python if: False vs 0.0