889 Stimmen

Wie kann man Python-Warnungen deaktivieren?

Ich arbeite mit Code, der eine Menge (für mich im Moment) nutzloser Warnungen ausgibt, wenn ich die warnings Bibliothek. Beim Lesen (/Scannen) der Dokumentation fand ich nur einen Weg um Warnungen für einzelne Funktionen zu deaktivieren . Aber ich möchte nicht so viel am Code ändern.

Gibt es eine Flagge wie python -no-warning foo.py ?

Was würden Sie empfehlen?

53voto

user3226167 Punkte 2669

Wenn Sie wissen, welche nutzlosen Warnungen Sie normalerweise erhalten, können Sie diese nach Meldungen filtern.

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")

7voto

jorijnsmit Punkte 4601

Mir ist klar, dass dies nur für eine Nische von Situationen gilt, aber innerhalb einer numpy Zusammenhang verwende ich sehr gerne np.errstate :

np.sqrt(-1)

__main__:1: RuntimeWarning: invalid value encountered in sqrt
nan

Allerdings ist die Verwendung von np.errstate :

with np.errstate(invalid='ignore'):
    np.sqrt(-1)

nan

Das Beste daran ist, dass Sie dies nur auf ganz bestimmte Codezeilen anwenden können.

5voto

Safvan CK Punkte 1035

Mehr pythonische Art zu ignorieren WARNUNGEN


Seit ' warning.filterwarnings() ' nicht alle Warnungen unterdrückt, schlage ich vor, dass Sie die folgende Methode anwenden:

import logging

for name in logging.Logger.manager.loggerDict.keys():
    logging.getLogger(name).setLevel(logging.CRITICAL)

#rest of the code starts here...

OR,

Wenn Sie nur einen spezifisch eine Reihe von Warnungen, dann können Sie wie folgt filtern:

import logging

for name in logging.Logger.manager.loggerDict.keys():
    if ('boto' in name) or ('urllib3' in name) or ('s3transfer' in name) or ('boto3' in name) or ('botocore' in name) or ('nose' in name):
            logging.getLogger(name).setLevel(logging.CRITICAL)

#rest of the code starts here...

-11voto

jvp Punkte 49

Warnungen werden über stderr ausgegeben, und die einfache Lösung besteht darin, sie an den Befehl anzuhängen.

2> /dev/null

Alternativ können Sie Fehler in eine Datei umleiten, so dass sie erhalten bleiben, ohne die Konsolenausgabe zu verschmutzen.

2> my-cli-errors.log

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X