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?
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.)
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 DeprecationWarning
s, mais pas ceux causés par:
import md5, sha
Vous devriez juste réparer votre code mais juste au cas où,
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
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.
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...
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.
Convertir l'argument en int. C'est aussi simple que
int(argument)
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.
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é?
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.
ENV PYTHONWARNINGS="ignore::DeprecationWarning"