web-dev-qa-db-fra.com

Comment ignorer les avertissements de dépréciation dans Python

Je continue à avoir ceci:

DeprecationWarning: integer argument expected, got float

Comment faire en sorte que ce message disparaisse? Existe-t-il un moyen d'éviter les avertissements en Python?

143
Mohammed

De la documentation du warnings module :

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

Si vous êtes sous Windows: passez -W ignore::DeprecationWarning comme argument pour Python. Mieux vaut résoudre le problème en convertissant à int .

(Notez que dans Python 3.2, les avertissements de dépréciation sont ignorés par défaut.)

105
Stephan202

J'ai eu ces:

/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

Fixé avec:

import warnings

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

yourcode()

Maintenant, vous obtenez toujours tous les autres DeprecationWarnings, mais pas ceux causés par:

import md5, sha
177
Eddy Pronk

Vous devriez juste réparer votre code mais juste au cas où,

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

J'ai trouvé le moyen le plus simple de le faire (en particulier sous Windows) en ajoutant ce qui suit à C:\Python26\Lib\site-packages\sitecustomize.py:

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

Notez que je devais créer ce fichier. Bien sûr, changez le chemin en python si le vôtre est différent.

26
Tristan Havelick

Aucune de ces réponses ne fonctionnant pour moi, je vais donc poster mon moyen de résoudre ce problème. J'utilise le code suivant at the beginning of my main.py script et ça marche bien.


Utilisez le texte suivant tel quel (copier-coller):

import "blabla"
import "blabla"

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

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

19
serafeim

Passer les arguments corrects? : P

Sur une note plus sérieuse, vous pouvez passer l'argument -Wi :: DeprecationWarning sur la ligne de commande à l'interpréteur pour ignorer les avertissements de dépréciation.

6
shylent

Convertir l'argument en int. C'est aussi simple que

int(argument)
5
Gonzalo Quero

Lorsque vous souhaitez ignorer les avertissements uniquement dans les fonctions, vous pouvez procéder comme suit.

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

Ajoutez simplement le décorateur @ignore_warnings à la fonction pour laquelle vous souhaitez ignorer tous les avertissements.

3
Trideep Rath

Ne vous en faites pas, mais on vous prévient que ce que vous faites va probablement cesser de fonctionner lors de la prochaine mise à niveau de python. Convertissez-vous en int et finissez-en.

BTW. Vous pouvez également écrire votre propre gestionnaire d'alertes. Attribuez simplement une fonction qui ne fait rien. Comment rediriger python avertissements vers un flux personnalisé?

1
SpliFF

Si vous savez ce que vous faites, un autre moyen est simplement recherchez le fichier qui vous avertit (le chemin du fichier est indiqué dans les informations d'avertissement), commentez les lignes qui génèrent les avertissements.

1
Statham

Solution Docker

  • Désactivez TOUS les avertissements avant d'exécuter l'application python
    • Vous pouvez également désactiver vos tests dockerisés
ENV PYTHONWARNINGS="ignore::DeprecationWarning"
1