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?

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


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) 

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

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.


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


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.


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"


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


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")

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")

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.


0

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

from warnings import filterwarnings
filterwarnings("ignore")

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


44
Ese consejo solo funciona si de hecho es su propio código y no de un paquete de terceros.
Christopher Barber
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.