Come ignorare gli avvisi di deprecazione in Python


176

Continuo a ricevere questo:

DeprecationWarning: integer argument expected, got float

Come faccio a far sparire questo messaggio? C'è un modo per evitare gli avvisi in Python?

Risposte:


121

Dalla documentazione del warningsmodulo :

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

Se sei su Windows: passa -W ignore::DeprecationWarningcome argomento a Python. Meglio però risolvere il problema, lanciando a int .

(Si noti che in Python 3.2, gli avvisi di deprecazione vengono ignorati per impostazione predefinita.)


8
Vorrei poter fare questo lavoro ... Ottengo un /usr/bin/env: python -W ignore::DeprecationWarning: No such file or directoryerrore. Funziona se eseguo python con l' -W ignore::DeprecationWarningopzione sulla riga di comando, ma / usr / bin / env non lo gestisce.
weronika,

4
Sembra essere una soluzione solo per Windows.
Daniel Miles,

15
Puoi impostare la variabile env PYTHONWARNINGS che ha funzionato per me export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson"per disabilitare gli avvisi di deprivazione django json da sorl
yvess

@yvess, se questa fosse una risposta, avrei votato a favore. Sembra un modo pulito per ignorare specifici avvisi a livello di sistema. L'ho inserito nel mio ~ / .profile. Funziona alla grande.
allanberry,

Salve, possiamo in qualche modo trasformare questo messaggio di avviso di deprecazione in un messaggio con informazioni sul tipo. Quello che vorrei è solo visualizzare il messaggio sulla console per non essere classificato come qualsiasi tipo di avviso.
Krishna Oza,

194

Dovresti semplicemente correggere il tuo codice ma, nel caso,

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

2
Ha funzionato per me usando iPython
zbinsd,

21
Questo non funziona affatto per me, vedendo ancora deprecationwarnings.
user1244215

8
@ user1244215 Potrei sbagliarmi, ma penso che sia importante dove nel tuo codice esegui warnings.filterwarnings("ignore", category=DeprecationWarning). Penso che devi eseguirlo dopo aver importato la libreria che sputa gli avvisi, anche se potrei sbagliarmi.
Jack Kelly,

1
@CodingYourLife categoria è necessaria affinché si continua a vedere altri tipi di avvertimenti come RuntimeWarning ecc
Ismail

1
Nel mio caso, il codice che stava causando l'avviso era from xgboost import XGBClassifier. Ho dovuto mettere warnings.filterwarnings("ignore", category=DeprecationWarning)immediatamente prima dell'importazione perché funzionasse.
sedeh

193

Ho avuto questi:

/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

Risolto con:

import warnings

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

yourcode()

Ora ottieni ancora tutti gli altri DeprecationWarning, ma non quelli causati da:

import md5, sha

2
Fantastico, grazie mille !! (Mi ci è voluto un attimo per rendermi conto che potevo anche avvolgere frammenti di codice non importati in questo, poiché alcuni pacchetti generavano anche DeprecationWarnings quando usati dopo l'importazione.) Modo molto bello per mettere a tacere solo specifici DeprecationWarnings che ho già visto e deciso Voglio ignorare.
Weronika,

29

Ho trovato il modo più pulito per farlo (specialmente su Windows) è aggiungendo quanto segue a C: \ Python26 \ Lib \ site-pacchetti \ sitecustomize.py:

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

Nota che ho dovuto creare questo file. Naturalmente, cambia il percorso in python se il tuo è diverso.


26

Nessuna di queste risposte ha funzionato per me, quindi pubblicherò il mio modo di risolverlo. Uso il seguente at the beginning of my main.pyscript e funziona benissimo.


Utilizzare quanto segue (copia e incolla):

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

Esempio:

import "blabla"
import "blabla"

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

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


4
Funzionava quando tutte le altre soluzioni no. Grazie!
cxxl,

Anche questo mi ha salvato. Sono contento di poterti aiutare.
seralouk,

Non funziona in 3.7.3 per gli avvisi di deprecazione di AstroPy. :(
ingyhere

Ha funzionato per me, grazie :)
valkyrie55

grandi notizie ! salute
seralouk

6

Passare gli argomenti corretti? : P

Nella nota più seria, puoi passare l'argomento -Wi :: DeprecationWarning sulla riga di comando all'interprete per ignorare gli avvisi di deprecazione.


5

Soluzione Docker

  • Disabilitare TUTTI gli avvisi prima di eseguire l'applicazione Python
    • Puoi anche disabilitare i test ancorati
ENV PYTHONWARNINGS="ignore::DeprecationWarning"


4

Quando si desidera ignorare gli avvisi solo nelle funzioni, è possibile effettuare le seguenti operazioni.

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

Basta aggiungere il decoratore @ignore_warnings sulla funzione che si desidera ignorare tutti gli avvisi


3

Prova il codice seguente se stai usando Python3:

import sys

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

o prova questo ...

import warnings

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

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

o prova questo ...

import warnings
warnings.filterwarnings("ignore")

2

Python 3

Basta scrivere sotto le righe che sono facili da ricordare prima di scrivere il codice:

import warnings

warnings.filterwarnings("ignore")

0

Se sai cosa stai facendo, un altro modo è semplicemente trovare il file che ti avverte (il percorso del file è mostrato nelle informazioni di avviso), commentare le righe che generano gli avvisi.


0

Per python 3, basta scrivere sotto i codici per ignorare tutti gli avvisi.

from warnings import filterwarnings
filterwarnings("ignore")

-2

Non per picchiarvi, ma vieni avvisato che probabilmente quello che stai facendo smetterà di funzionare al prossimo aggiornamento di Python. Converti in int e finisci con esso.

BTW. Puoi anche scrivere il tuo gestore di avvisi. Basta assegnare una funzione che non fa nulla. Come reindirizzare gli avvisi di Python su uno stream personalizzato?


4
Tale consiglio funziona solo se si tratta effettivamente del suo codice e non di un pacchetto di terze parti.
Christopher Barber,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.