Ik werk met code die veel (voor mij op dit moment) nutteloze waarschuwingen geeft met behulp van de warnings
bibliotheek. Bij het lezen (/scannen) van de documentatie vond ik alleen een manier om waarschuwingen uit te schakelen voor enkele functies. Maar ik wil niet zoveel van de code veranderen.
Is er een vlag zoals python -no-warning foo.py
?
Wat zou je aanraden?
Antwoord 1, autoriteit 100%
Er is de -W
optie.
python -W ignore foo.py
Antwoord 2, autoriteit 94%
Bekijk het gedeelte Tijdelijk onderdrukken van waarschuwingenvan de Python-documenten:
Als je code gebruikt waarvan je weet dat deze een waarschuwing geeft, zoals een verouderde functie, maar je wilt de waarschuwing niet zien, dan is het mogelijk om de waarschuwing te onderdrukken met de
catch_warnings
contextmanager:import warnings def fxn(): warnings.warn("deprecated", DeprecationWarning) with warnings.catch_warnings(): warnings.simplefilter("ignore") fxn()
Ik keur het niet goed, maar je kunt gewoon alle waarschuwingen onderdrukkenhiermee:
import warnings
warnings.filterwarnings("ignore")
Bijvoorbeeld:
>>> import warnings
>>> def f():
... print('before')
... warnings.warn('you are warned!')
... print('after')
...
>>> f()
before
<stdin>:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
Antwoord 3, autoriteit 26%
U kunt ook een omgevingsvariabele definiëren (nieuwe functie in 2010 – d.w.z. python 2.7)
export PYTHONWARNINGS="ignore"
Test als volgt: Standaard
$ export PYTHONWARNINGS="default"
$ python
>>> import warnings
>>> warnings.warn('my warning')
__main__:1: UserWarning: my warning
>>>
Negeerwaarschuwingen
$ export PYTHONWARNINGS="ignore"
$ python
>>> import warnings
>>> warnings.warn('my warning')
>>>
Voor beëindigingswaarschuwingenbekijk je hoe -te negeren-deprecation-warnings-in-python
Hier gekopieerd…
Uit documentatie van de warnings
:
#!/usr/bin/env python -W ignore::DeprecationWarning
Als je Windows gebruikt: geef -W ignore::DeprecationWarning
door als argument aan Python. Het is echter beter om het probleem op te lossen door te casten naar int.
(Merk op dat in Python 3.2 waarschuwingen voor beëindiging standaard worden genegeerd.)
Of:
import warnings
with warnings.catch_warnings():
warnings.filterwarnings("ignore", category=DeprecationWarning)
import md5, sha
yourcode()
Je krijgt nu nog steeds alle andere DeprecationWarning
s, maar niet degene die worden veroorzaakt door:
import md5, sha
Antwoord 4, autoriteit 16%
Dit is een oude vraag, maar er zijn nieuwere richtlijnen in PEP 565dat om alle waarschuwingen uit te schakelen als je een python-applicatie schrijft, je moet gebruiken:
import sys
import warnings
if not sys.warnoptions:
warnings.simplefilter("ignore")
De reden waarom dit wordt aanbevolen, is dat alle waarschuwingen standaard worden uitgeschakeld, maar dat ze vooral weer kunnen worden ingeschakeld via python -W
op de opdrachtregel of PYTHONWARNINGS
.
Antwoord 5, autoriteit 16%
Als je niet iets ingewikkelds wilt, dan:
import warnings
warnings.filterwarnings("ignore", category=FutureWarning)
Antwoord 6, autoriteit 6%
Als je weet wat de nutteloze waarschuwingen zijn die je gewoonlijk tegenkomt, kun je ze filteren op bericht.
import warnings
#ignore by message
warnings.filterwarnings("ignore", message="divide by zero encountered in divide")
#part of the message is also okay
warnings.filterwarnings("ignore", message="divide by zero encountered")
warnings.filterwarnings("ignore", message="invalid value encountered")
Antwoord 7, autoriteit 2%
Om het niet ingewikkeld te maken, gebruik gewoon deze twee regels
import warnings
warnings.filterwarnings('ignore')
Antwoord 8
import sys
if not sys.warnoptions:
import warnings
warnings.simplefilter("ignore")
Verander de standaardwaarde voor negeren wanneer u aan het bestand werkt of voeg nieuwe functionaliteit toe om waarschuwingen opnieuw in te schakelen.
Antwoord 9
Ik realiseer me dat dit alleen van toepassing is op een deel van de situaties, maar binnen een numpy
-context gebruik ik graag np.errstate
:
np.sqrt(-1)
__main__:1: RuntimeWarning: invalid value encountered in sqrt
nan
Echter, met behulp van np.errstate
:
with np.errstate(invalid='ignore'):
np.sqrt(-1)
nan
Het beste is dat je dit alleen op zeer specifieke regels code kunt toepassen.
Antwoord 10
Als al het andere faalt, gebruik dan dit: https://github.com/polvoazul/shutup
pip install shutup
Toevoegen boven de top van uw code:
import shutup; shutup.please()
Disclaimer: Ik ben de eigenaar van die repository. Ik schreef het na de 5e keer dat ik dit nodig had en kon niets eenvoudigs vinden dat gewoon werkte.
11
Waarschuwingen worden uitgevoerd via Stderr en de eenvoudige oplossing is om ‘2 & GT; / dev / null ‘aan de CLI. Dit is veel zin voor veel gebruikers, zoals die met Cento’s 6 die vastzitten bij Python 2.6-afhankelijkheden (zoals yum) en verschillende modules worden naar de rand van uitsterven in hun dekking geduwd.
Dit geldt vooral voor cryptografie waarbij Sni et Cetera betrokken is. Men kan 2.6 bijwerken voor HTTPS-hantering met behulp van de proc op:
https://urllib3.readthedocs.io/en/latest/ user-guide.html#ssl-py2
de waarschuwing is nog steeds op zijn plaats, maar alles wat je wilt is teruggestuurd. de re-direct van stderr laat je met schone terminal/shell-output, hoewel de stdout-inhoud zelf niet verandert.
reageren op FriendFX. zin één (1) reageert direct op het probleem met een universele oplossing. zin twee (2) houdt rekening met het aangehaalde anker voor ‘waarschuwingen uitschakelen’, dat specifiek is voor Python 2.6 en merkt op dat RHEL/centos 6-gebruikers niet direct zonder 2.6 kunnen. hoewel er geen specifieke waarschuwingen werden genoemd, beantwoordt paragraaf twee (2) de 2.6-vraag die ik het vaakst krijg over de tekortkomingen in de cryptografiemodule en hoe men de HTTPS/TLS-prestaties van python kan “moderniseren” (dwz upgraden, backporten, repareren) . paragraaf drie (3) verklaart slechts het resultaat van het gebruik van de omleiding en het upgraden van de module/afhankelijkheden.