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?

Mohammed
quelle

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

Stephan202
quelle
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) 
ismail
quelle
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
Eddy Pronk
quelle
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.

Tristan Havelick
quelle
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...

Seralouk
quelle
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.

shylent
quelle
4

Konvertieren Sie das Argument in int. Es ist so einfach wie

int(argument)
Gonzalo Quero
quelle
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

Trideep Rath
quelle
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"
Marcello de Sales
quelle
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")
Amar Kumar
quelle
2

Python 3

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

import warnings

warnings.filterwarnings("ignore")
Dipen Gajjar
quelle
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.

Statham
quelle
0

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

from warnings import filterwarnings
filterwarnings("ignore")
Ashish Anand
quelle
-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?

SpliFF
quelle
4
Dieser Rat funktioniert nur, wenn es sich tatsächlich um seinen eigenen Code handelt und nicht um ein Paket eines Drittanbieters.
Christopher Barber