Come ignorare i warning di deprecazione in Python
-
22-08-2019 - |
Domanda
Continuo a ricevere questo:
DeprecationWarning: integer argument expected, got float
Come faccio a fare questo messaggio andare via? C'è un modo per evitare gli avvertimenti in Python?
Soluzione
Dalla documentazione della warnings
modulo :
#!/usr/bin/env python -W ignore::DeprecationWarning
Se siete su Windows: passare -W ignore::DeprecationWarning
come argomento di Python. Meglio se per risolvere il problema, lanciando a int .
(Si noti che in Python 3.2, warning di deprecazione vengono ignorati per impostazione predefinita.)
Altri suggerimenti
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
fissi con:
import warnings
with warnings.catch_warnings():
warnings.filterwarnings("ignore",category=DeprecationWarning)
import md5, sha
yourcode()
Ora è ancora ottenere tutte le altre DeprecationWarning
s, ma non quelli causati da:
import md5, sha
Si dovrebbe solo risolvere il tuo codice, ma solo nel caso,
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
Ho trovato il modo più pulito per fare questo (in particolare su Windows) è aggiungendo il seguente a C: \ Python26 \ lib \ site-packages \ sitecustomize.py:
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
Si noti che ho dovuto creare questo file. Naturalmente, modificare il percorso di python se differente.
Nessuna di queste risposte ha lavorato per me, così mi post il mio modo per risolvere questo. Io uso il seguente script at the beginning of my main.py
e funziona bene.
Utilizza il seguente come è (copia-incolla):
import "blabla"
import "blabla"
def warn(*args, **kwargs):
pass
import warnings
warnings.warn = warn
# more code here...
# more code here...
Far passare gli argomenti corretti? : P
Sulla nota più grave, è possibile passare l'argomento -Wi :: DeprecationWarning sulla riga di comando per l'interprete di ignorare i warning di deprecazione.
Converti l'argomento a int. E 'semplice come
int(argument)
Quando si vuole ignorare gli avvertimenti solo a funzioni che si possono fare le seguenti.
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
Non per battere in su su di esso, ma vi viene avvertito che quello che stai facendo è probabile che smetterà di funzionare quando si esegue l'aggiornamento successivo pitone. Convertire a int e da fare con esso.
A proposito. È inoltre possibile scrivere il proprio gestore avvertimenti. Basta assegnare una funzione che non fa nulla. Come reindirizzare avvertimenti Python in un flusso personalizzato?
Docker Soluzione
- Disabilita tutto avvertenze prima di eseguire l'applicazione di pitone
- È possibile disattivare i test dockerized così
ENV PYTHONWARNINGS="ignore::DeprecationWarning"
Se si sa cosa si sta facendo, un altro modo è semplicemente trovare il file che avvisa l'utente (il percorso del file è mostrato nelle informazioni di avvertimento), commentare le righe che generano gli avvisi.