Hoe Python-waarschuwingen uitschakelen?

Ik werk met code die veel (voor mij op dit moment) nutteloze waarschuwingen geeft met behulp van de warningsbibliotheek. 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 -Woptie.

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_warningscontextmanager:

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::DeprecationWarningdoor 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 DeprecationWarnings, 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 -Wop 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.

Other episodes