with warning traduccion quitar ingles examples eliminar catch_warnings python python-2.7 warnings suppress-warnings

python - quitar - warnings traduccion



¿Cómo obtengo warnings.warn para emitir una advertencia y no ignorar la línea? (2)

Estoy tratando de generar un DeprecationWarning , con un fragmento de código basado en el ejemplo que se muestra en los documentos. http://docs.python.org/2/library/warnings.html#warnings.warn

Oficial

def deprecation(message): warnings.warn(message, DeprecationWarning, stacklevel=2)

Mía

import warnings warnings.warn("This is a warnings.", DeprecationWarning, stacklevel=2) is None # returns True

Intenté eliminar el argumento stacklevel, configurándolo en negativo, 0, 2 y 20000. La advertencia siempre se traga en silencio. No emite una advertencia ni genera una excepción. Simplemente ignora la línea y devuelve None . Los documentos no mencionan los criterios para ignorar. Al emitir un mensaje, hace que warnings.warn emita correctamente un Userwarning.

¿Qué puede estar causando esto y cómo me advierto que realmente lo advierta?


De los documentos:

De forma predeterminada, Python instala varios filtros de advertencia, que pueden anularse mediante las opciones de línea de comando pasadas a -W y llamadas a filterwarnings ().

  • DeprecationWarning and PendingDrerecationWarning y ImportWarning se ignoran.
  • BytesWarning se ignora a menos que la opción -b se administre una o dos veces; en este caso, esta advertencia se imprime (-b) o se convierte en una excepción (-bb).

De forma predeterminada, se ignora DeprecationWarning . Puede cambiar los filtros usando lo siguiente:

warnings.simplefilter(''always'', DeprecationWarning)

Ahora tus advertencias deberían imprimirse:

>>> import warnings >>> warnings.simplefilter(''always'', DeprecationWarning) >>> warnings.warn(''test'', DeprecationWarning) /home/guest/.env/bin/ipython:1: DeprecationWarning: test #!/home/guest/.env/bin/python


El módulo de advertencias implementa el filtrado de advertencias según ciertas condiciones. Puede mostrar los filtros predeterminados al imprimir warnings.filters :

$ python -c "import warnings; print warnings.filters" [(''ignore'', None, <type ''exceptions.DeprecationWarning''>, None, 0), (''ignore'', None, <type ''exceptions.PendingDeprecationWarning''>, None, 0), (''ignore'', None, <type ''exceptions.ImportWarning''>, None, 0), (''ignore'', None, <type ''exceptions.BytesWarning''>, None, 0)]

Como puede ver, DeprecationWarning se ignora por defecto. Puede utilizar las funciones en el módulo de warnings y la opción de línea de comandos -W en Python para configurar los filtros: consulte la documentación para obtener más información.

Ejemplo:

$ python -Wall Python 2.7.3 (default, Sep 26 2013, 20:03:06) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import warnings >>> warnings.warn("test", DeprecationWarning) __main__:1: DeprecationWarning: test