Cómo ignorar las advertencias de desaprobación en Python

176

Sigo recibiendo esto:

DeprecationWarning: integer argument expected, got float

¿Cómo hago para que este mensaje desaparezca? ¿Hay alguna manera de evitar advertencias en Python?

Mahoma
fuente

Respuestas:

121

De la documentación del warningsmódulo :

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

Si estás en Windows: pasa -W ignore::DeprecationWarningcomo argumento a Python. Sin embargo, es mejor resolver el problema enviando a int .

(Tenga en cuenta que en Python 3.2, las advertencias de desaprobación se ignoran de forma predeterminada).

Stephan202
fuente
8
Desearía poder hacer que esto funcione ... Me sale un /usr/bin/env: python -W ignore::DeprecationWarning: No such file or directoryerror. Funciona si ejecuto python con la -W ignore::DeprecationWarningopción en la línea de comandos, pero / usr / bin / env no se ocupa de eso.
weronika
44
Parece ser una solución solo para Windows.
Daniel Miles
15
Puede configurar la variable env PYTHONWARNINGS que funcionó para mí export PYTHONWARNINGS="ignore::DeprecationWarning:simplejson"para deshabilitar las advertencias de depuración de django json de sorl
yvess
@yvess, si esta fuera una respuesta, lo hubiera votado. Parece una forma limpia de ignorar advertencias específicas en todo el sistema. Lo puse en mi perfil ~ /. Funciona genial.
allanberry
Hola, ¿cómo podemos convertir este mensaje de Advertencia de desaprobación en un mensaje de información de tipo? Lo que me gustaría es mostrar el mensaje en la consola para que no se clasifique como ningún tipo de advertencia.
Krishna Oza
194

Deberías arreglar tu código pero por si acaso,

import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning) 
ismail
fuente
2
Trabajó para mí usando iPython
zbinsd
21
Esto no funciona para mí en absoluto, todavía veo advertencias de desaprobación.
user1244215
8
@ user1244215 Podría estar equivocado, pero creo que importa en qué parte del código se ejecuta warnings.filterwarnings("ignore", category=DeprecationWarning). Creo que debe ejecutar esto después de importar la biblioteca que escupe las advertencias, aunque podría estar equivocado.
Jack Kelly
1
Se necesita @CodingYourLife categoría por lo que seguirá viendo otros tipos de advertencias como RuntimeWarning etc.
Ismail
1
En mi caso, el código que estaba causando la advertencia era from xgboost import XGBClassifier. Tuve que poner warnings.filterwarnings("ignore", category=DeprecationWarning)inmediatamente antes de esa importación para que funcione.
sedeh
193

Tuve estos:

/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

Solucionado con:

import warnings

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

yourcode()

Ahora todavía obtienes todos los otros DeprecationWarnings, pero no los causados ​​por:

import md5, sha
Eddy Pronk
fuente
2
¡¡Grandioso, muchas gracias!! (Me tomó un momento darme cuenta de que también podría incluir bits de código que no son de importación en esto, ya que algunos paquetes también generaban DeprecationWarnings cuando se usaban después de la importación). Una manera muy agradable de silenciar solo DeprecationWarnings específicos que ya he visto y decidido Quiero ignorar
weronika
29

Encontré que la forma más limpia de hacer esto (especialmente en Windows) es agregar lo siguiente a C: \ Python26 \ Lib \ site-packages \ sitecustomize.py:

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

Tenga en cuenta que tuve que crear este archivo. Por supuesto, cambie la ruta a Python si la suya es diferente.

Tristan Havelick
fuente
26

Ninguna de estas respuestas funcionó para mí, así que publicaré mi manera de resolver esto. Yo uso el siguiente at the beginning of my main.pyscript y funciona bien.


Use lo siguiente tal como está (cópielo y péguelo):

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

Ejemplo:

import "blabla"
import "blabla"

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

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

seralouk
fuente
44
Eso funcionó cuando todas las otras soluciones no funcionaron. ¡Gracias!
cxxl
Esto también me salvó. Me alegro de poder ayudar.
seralouk
No funciona en 3.7.3 para las advertencias de desuso de AstroPy. :(
ingyhere
Trabajó para mí, gracias :)
valkyrie55
una gran noticia ! aplausos
seralouk
6

Pasar los argumentos correctos? :PAGS

En la nota más seria, puede pasar el argumento -Wi :: DeprecationWarning en la línea de comando al intérprete para ignorar las advertencias de desaprobación.

shylent
fuente
5

Solución Docker

  • Deshabilite TODAS las advertencias antes de ejecutar la aplicación Python
    • Puede deshabilitar sus pruebas dockerizadas también
ENV PYTHONWARNINGS="ignore::DeprecationWarning"
Marcello de Sales
fuente
4

Convierta el argumento a int. Es tan simple como

int(argument)
Gonzalo Quero
fuente
4

Cuando quiera ignorar las advertencias solo en las funciones, puede hacer lo siguiente.

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

Simplemente agregue el decorador @ignore_warnings en la función que desea ignorar todas las advertencias

Trideep Rath
fuente
3

Pruebe el siguiente código si está utilizando Python3:

import sys

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

o prueba esto ...

import warnings

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

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

o prueba esto ...

import warnings
warnings.filterwarnings("ignore")
Amar Kumar
fuente
2

Python 3

Simplemente escriba debajo de las líneas que sean fáciles de recordar antes de escribir su código:

import warnings

warnings.filterwarnings("ignore")
Dipen Gajjar
fuente
0

Si sabe lo que está haciendo, otra forma es simplemente encontrar el archivo que le advierte (la ruta del archivo se muestra en la información de advertencia), comentar las líneas que generan las advertencias.

Statham
fuente
0

Para python 3, simplemente escriba los códigos a continuación para ignorar todas las advertencias.

from warnings import filterwarnings
filterwarnings("ignore")
Ashish Anand
fuente
-2

No es para castigarlo, pero se le advierte que lo que está haciendo probablemente dejará de funcionar la próxima vez que actualice Python. Convierte a int y termina de una vez.

Por cierto. También puede escribir su propio controlador de advertencias. Simplemente asigne una función que no haga nada. ¿Cómo redirigir las advertencias de Python a una transmisión personalizada?

SpliFF
fuente
44
Ese consejo solo funciona si de hecho es su propio código y no de un paquete de terceros.
Christopher Barber