So ignorieren Sie Verfallswarnungen in Python


175

Ich verstehe das immer wieder:

DeprecationWarning: integer argument expected, got float

Wie kann ich diese Nachricht verschwinden lassen? Gibt es eine Möglichkeit, Warnungen in Python zu vermeiden?

Antworten:


121

Aus der Dokumentation des warningsModuls :

 #!/usr/bin/env python -W ignore::DeprecationWarning

Wenn Sie unter Windows arbeiten: Übergeben Sie -W ignore::DeprecationWarningals Argument an Python. Besser, um das Problem zu lösen, indem Sie auf int umwandeln .

(Beachten Sie, dass in Python 3.2 Verfallswarnungen standardmäßig ignoriert werden.)


8
Ich wünschte, ich könnte diese Arbeit machen ... Ich bekomme eine /usr/bin/env: python -W ignore::DeprecationWarning: No such file or directoryFehlermeldung. Es funktioniert, wenn ich Python mit der -W ignore::DeprecationWarningOption in der Befehlszeile ausführe , aber / usr / bin / env nicht damit umgeht.
Weronika

4
Scheint eine reine Windows-Lösung zu sein.
Daniel Miles

15
Sie können die env-Variable PYTHONWARNINGS setzen, die für mich funktioniert hat export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson", um Django-Json-Deprication-Warnungen von sorl
yvess

@yvess, wenn dies eine Antwort wäre, hätte ich dafür gestimmt. Scheint eine saubere Möglichkeit zu sein, bestimmte Warnungen systemweit zu ignorieren. Ich habe es in mein ~ / .profil eingefügt. Funktioniert super.
Allanberry

Hallo, können wir einige, wie diese Verfallswarnmeldung in eine Nachricht mit Typinformationen umgewandelt wird? Ich möchte nur die Meldung auf der Konsole anzeigen, die nicht als Warnung eingestuft werden soll.
Krishna Oza

194

Sie sollten nur Ihren Code reparieren, aber nur für den Fall,

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning) 

2
Arbeitete für mich mit iPython
zbinsd

21
Das funktioniert bei mir überhaupt nicht, da ich immer noch Abwertungswarnungen sehe.
user1244215

8
@ user1244215 Ich könnte mich irren, aber ich denke, es ist wichtig, wo in Ihrem Code Sie ausführen warnings.filterwarnings("ignore", category=DeprecationWarning). Ich denke, Sie müssen dies ausführen, nachdem Sie die Bibliothek importiert haben, die die Warnungen ausspuckt, obwohl ich mich irren könnte.
Jack Kelly

1
@CodingYourLife Kategorie wird benötigt, damit Sie noch andere Arten von Warnungen wie RuntimeWarning usw. sehen können
ismail

1
In meinem Fall der Code, der die Warnung verursacht wurde war from xgboost import XGBClassifier. Ich musste warnings.filterwarnings("ignore", category=DeprecationWarning)unmittelbar vor diesem Import setzen, damit es funktionierte.
Sedeh

192

Ich hatte diese:

/home/eddyp/virtualenv/lib/python2.6/site-packages/Twisted-8.2.0-py2.6-linux-x86_64.egg/twisted/persisted/sob.py:12:
DeprecationWarning: the md5 module is deprecated; use hashlib instead import os, md5, sys

/home/eddyp/virtualenv/lib/python2.6/site-packages/Twisted-8.2.0-py2.6-linux-x86_64.egg/twisted/python/filepath.py:12:
DeprecationWarning: the sha module is deprecated; use the hashlib module instead import sha

Es wurde behoben mit:

import warnings

with warnings.catch_warnings():
    warnings.filterwarnings("ignore",category=DeprecationWarning)
    import md5, sha

yourcode()

Jetzt bekommen Sie immer noch alle anderen DeprecationWarnings, aber nicht die, die verursacht werden durch:

import md5, sha

2
Super, vielen Dank !! (Es dauerte einen Moment, bis mir klar wurde, dass ich auch nicht importierte Codebits darin einbinden konnte, da einige Pakete auch DeprecationWarnings generierten, wenn sie nach dem Import verwendet wurden.) Sehr gute Möglichkeit, nur bestimmte DeprecationWarnings zum Schweigen zu bringen, die ich mir bereits angesehen und entschieden habe Ich möchte ignorieren.
Weronika

29

Ich fand den saubersten Weg, dies zu tun (insbesondere unter Windows), indem ich Folgendes zu C hinzufügte: \ Python26 \ Lib \ site-packages \ sitecustomize.py:

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)

Beachten Sie, dass ich diese Datei erstellen musste. Ändern Sie natürlich den Pfad zu Python, wenn Ihr Pfad anders ist.


25

Keine dieser Antworten hat bei mir funktioniert, daher werde ich meinen Weg zur Lösung dieses Problems veröffentlichen. Ich benutze das folgende at the beginning of my main.pySkript und es funktioniert gut.


Verwenden Sie Folgendes wie es ist (kopieren und einfügen):

def warn(*args, **kwargs):
    pass
import warnings
warnings.warn = warn

Beispiel:

import "blabla"
import "blabla"

def warn(*args, **kwargs):
    pass
import warnings
warnings.warn = warn

# more code here...
# more code here...


4
Das hat funktioniert, als alle anderen Lösungen nicht funktionierten. Vielen Dank!
cxxl

Das hat mich auch gerettet. Ich bin froh, dass ich helfen konnte.
Seralouk

Funktioniert nicht in 3.7.3 für AstroPy-Verfallswarnungen. :(
ingyhere

6

Die richtigen Argumente übergeben? : P.

Im Ernst, Sie können das Argument -Wi :: DeprecationWarning in der Befehlszeile an den Interpreter übergeben, um die Verfallswarnungen zu ignorieren.



4

Wenn Sie Warnungen nur in Funktionen ignorieren möchten, können Sie Folgendes tun.

import warnings
from functools import wraps


def ignore_warnings(f):
    @wraps(f)
    def inner(*args, **kwargs):
        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("ignore")
            response = f(*args, **kwargs)
        return response
    return inner

@ignore_warnings
def foo(arg1, arg2):
    ...
    write your code here without warnings
    ...

@ignore_warnings
def foo2(arg1, arg2, arg3):
    ...
    write your code here without warnings
    ...

Fügen Sie einfach den Dekorator @ignore_warnings zu der Funktion hinzu, die Sie alle Warnungen ignorieren möchten


4

Docker-Lösung

  • Deaktivieren Sie ALLE Warnungen, bevor Sie die Python-Anwendung ausführen
    • Sie können auch Ihre Docker-Tests deaktivieren
ENV PYTHONWARNINGS="ignore::DeprecationWarning"

3

Versuchen Sie den folgenden Code, wenn Sie Python3 verwenden:

import sys

if not sys.warnoptions:
    import warnings
    warnings.simplefilter("ignore")

oder versuchen Sie das ...

import warnings

def fxn():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fxn()

oder versuchen Sie das ...

import warnings
warnings.filterwarnings("ignore")

2

Python 3

Schreiben Sie einfach die folgenden Zeilen, die leicht zu merken sind, bevor Sie Ihren Code schreiben:

import warnings

warnings.filterwarnings("ignore")

0

Wenn Sie wissen, was Sie tun, können Sie auch einfach die Datei finden, die Sie warnt (der Pfad der Datei wird in den Warninformationen angezeigt), und die Zeilen kommentieren, die die Warnungen generieren.


0

Schreiben Sie für Python 3 einfach die folgenden Codes, um alle Warnungen zu ignorieren.

from warnings import filterwarnings
filterwarnings("ignore")

-2

Um Sie nicht zu verprügeln, werden Sie jedoch gewarnt, dass das, was Sie tun, wahrscheinlich beim nächsten Upgrade von Python nicht mehr funktioniert. In int konvertieren und damit fertig sein.

Übrigens. Sie können auch Ihren eigenen Warnhandler schreiben. Weisen Sie einfach eine Funktion zu, die nichts bewirkt. Wie leite ich Python-Warnungen in einen benutzerdefinierten Stream um?


4
Dieser Rat funktioniert nur, wenn es sich tatsächlich um seinen eigenen Code handelt und nicht um ein Paket eines Drittanbieters.
Christopher Barber
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.