2009-05-18 6 views
101

Ich erhalte diese ignorieren:Wie deprecation Warnungen in Python

DeprecationWarning: integer argument expected, got float 

Wie kann ich diese Meldung weggehen? Gibt es eine Möglichkeit, Warnungen in Python zu vermeiden?

Antwort

84

Aus Dokumentation der warnings module:

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

Wenn Sie unter Windows sind: pass -W ignore::DeprecationWarning als Argument für Python. Besser, um das Problem zu lösen, indem Sie auf int werfen.

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

+0

Casting funktioniert auch ignorieren wollen .. aber die Fahne war hilfreich! – Mohammed

+6

Ich wünschte, ich könnte das schaffen ... Ich bekomme einen '/ usr/bin/env: python -W ignorieren :: DeprecationWarning: Keine solche Datei oder Verzeichnis" Fehler. Es funktioniert, wenn ich Python mit der Option "-W Ignore :: DeprecationWarning" in der Befehlszeile ausführen, aber/usr/bin/env nicht damit umgehen. – weronika

+2

Scheint eine reine Windows-Lösung zu sein. –

6

Übergeben Sie die richtigen Argumente? : P

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

5

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

int(argument) 
2

Nicht Sie es zu schlagen, aber sie gewarnt werden, dass, was Sie tun wahrscheinlich wird nicht mehr funktionieren, wenn Sie das nächste Upgrade Python. In int konvertieren und damit fertig sein.

BTW. Sie können auch einen eigenen Warnungshandler schreiben. Ordnen Sie einfach eine Funktion zu, die nichts tut. How to redirect python warnings to a custom stream?

+0

Dieser Ratschlag funktioniert nur, wenn es in der Tat sein eigener Code ist und nicht aus irgendeinem Paket von Drittanbietern. –

119

Sie sollten nur den Code beheben, aber nur für den Fall,

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

Arbeitete für mich mit iPython – zbinsd

+9

Dies funktioniert bei mir überhaupt nicht, immer noch ablehnen Warnungen. – user1244215

+1

@ user1244215 Ich könnte falsch liegen, aber ich denke, es spielt eine Rolle, wo Sie in Ihrem Code 'warnards.filterwarnings (" ignore ", category = DeprecationWarning)' ausführen. Ich denke, Sie müssen das ausführen, nachdem Sie die Bibliothek importiert haben, die die Warnungen ausspuckt, obwohl ich mich irren könnte. –

144

ich diese hatte:

/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 Feste mit:

import warnings 

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

yourcode() 

Jetzt noch Sie erhalten alle anderen DeprecationWarning s, aber nicht die verursacht durch:

import md5, sha 
+1

Super, vielen Dank !! (Ich brauchte einen Moment, um zu erkennen, dass ich auch nicht importierte Code-Bits einpacken konnte, da einige Pakete auch DeprecationWarnings erzeugten, wenn sie nach dem Import verwendet wurden.) Sehr nette Möglichkeit, nur bestimmte DeprecationWarnings zum Schweigen zu bringen, die ich bereits betrachtet und entschieden habe Ich möchte es ignorieren. – weronika

23

fand ich die sauberste Weg, dies zu tun (vor allem an den Fenstern) ist durch die folgende C und fügte hinzu: \ Python26 \ Lib \ site-packages \ sitecustomize.py:

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

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

0

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 @ignore_warnings Dekorateur auf die Funktion, die Sie alle Warnungen