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