Comment ignorer les avertissements d'obsolescence en Python


176

Je continue de recevoir ceci:

DeprecationWarning: integer argument expected, got float

Comment faire disparaître ce message? Existe-t-il un moyen d'éviter les avertissements en Python?

Réponses:


121

De la documentation du warningsmodule :

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

Si vous êtes sous Windows: passez -W ignore::DeprecationWarningen argument à Python. Mieux vaut cependant résoudre le problème, en castant en int .

(Notez que dans Python 3.2, les avertissements d'obsolescence sont ignorés par défaut.)


8
J'aimerais pouvoir faire ce travail ... J'obtiens une /usr/bin/env: python -W ignore::DeprecationWarning: No such file or directoryerreur. Cela fonctionne si j'exécute python avec l' -W ignore::DeprecationWarningoption sur la ligne de commande, mais / usr / bin / env ne le gère pas.
weronika

4
Semble être une solution Windows uniquement.
Daniel Miles

15
Vous pouvez définir la variable d'environnement PYTHONWARNINGS cela a fonctionné pour moi export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson"pour désactiver les avertissements de dépréciation django json de sorl
yvess

@yvess, si c'était une réponse, j'aurais voté pour. Semble un moyen propre d'ignorer des avertissements spécifiques à l'échelle du système. Je l'ai mis dans mon ~ / .profile. Fonctionne très bien.
allanberry

Salut, pouvons-nous comment transformer ce message d'avertissement de dépréciation en un message d'informations de type. Ce que je voudrais, c'est simplement afficher le message sur la console pour ne pas être classé comme un type d'avertissement.
Krishna Oza

194

Vous devriez juste corriger votre code mais juste au cas où,

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

2
A travaillé pour moi en utilisant iPython
zbinsd

21
Cela ne fonctionne pas du tout pour moi, je vois toujours des avertissements de dépréciation.
user1244215

8
@ user1244215 Je peux me tromper, mais je pense qu'il importe où dans votre code vous exécutez warnings.filterwarnings("ignore", category=DeprecationWarning). Je pense que vous devez l'exécuter après avoir importé la bibliothèque qui crache les avertissements, même si je peux me tromper.
Jack Kelly

1
La catégorie @CodingYourLife est nécessaire afin que vous puissiez toujours voir d'autres types d'avertissements comme RuntimeWarning, etc.
ismail

1
Dans mon cas, le code à l'origine de l'avertissement était from xgboost import XGBClassifier. J'ai dû mettre warnings.filterwarnings("ignore", category=DeprecationWarning)immédiatement avant cette importation pour que cela fonctionne.
sedeh

193

J'avais 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

Corrigé avec:

import warnings

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

yourcode()

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

import md5, sha

2
Génial, merci beaucoup !! (Il m'a fallu un moment pour me rendre compte que je pouvais également envelopper des bits de code non importés, car certains paquets généraient également des DeprecationWarnings lorsqu'ils étaient utilisés après l'importation.) Très bonne façon de ne faire taire que des DeprecationWarnings spécifiques que j'ai déjà regardés et décidé Je veux ignorer.
weronika

29

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

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

Notez que j'ai dû créer ce fichier. Bien sûr, changez le chemin vers python si le vôtre est différent.


26

Aucune de ces réponses n'a fonctionné pour moi, je vais donc publier ma façon de résoudre ce problème. J'utilise le at the beginning of my main.pyscript suivant et cela fonctionne très bien.


Utilisez ce qui suit tel quel (copiez-collez-le):

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

Exemple:

import "blabla"
import "blabla"

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

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


4
Cela a fonctionné quand toutes les autres solutions n'ont pas fonctionné. Merci!
cxxl

Cela m'a sauvé aussi. Heureux que je puisse aider.
seralouk

Ne fonctionne pas dans la version 3.7.3 pour les avertissements d'obsolescence d'AstroPy. :(
ingyhere

A travaillé pour moi, merci :)
valkyrie55

bonne nouvelle ! cheers
seralouk

6

Passez les bons arguments? : P

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


5

Solution Docker

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


4

Lorsque vous souhaitez ignorer les avertissements uniquement dans les fonctions, vous pouvez effectuer les opérations suivantes.

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 sur la fonction que vous souhaitez ignorer tous les avertissements


3

Essayez le code ci-dessous si vous utilisez Python3:

import sys

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

ou essayez ceci ...

import warnings

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

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

ou essayez ceci ...

import warnings
warnings.filterwarnings("ignore")

2

Python 3

Écrivez simplement ci-dessous des lignes faciles à retenir avant d'écrire votre code:

import warnings

warnings.filterwarnings("ignore")

0

Si vous savez ce que vous faites, une autre façon est simplement de trouver le fichier qui vous avertit (le chemin du fichier est indiqué dans les informations d'avertissement), de commenter les lignes qui génèrent les avertissements.


0

Pour python 3, écrivez simplement les codes ci-dessous pour ignorer tous les avertissements.

from warnings import filterwarnings
filterwarnings("ignore")

-2

Je ne veux pas vous en vouloir, mais vous êtes averti que ce que vous faites cessera probablement de fonctionner lors de la prochaine mise à niveau de python. Convertissez en int et en avez fini avec lui.

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


4
Ce conseil ne fonctionne que s'il s'agit bien de son propre code et non d'un package tiers.
Christopher Barber
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.