HOWTO · Python

Suprimir advertencias en Python

Este tutorial demuestra cómo suprimir las advertencias en los programas en Python.

En esta página

Para suprimir advertencias de Python, elija el ámbito: use warnings.filterwarnings() en un script, python -W ignore script.py para un proceso o establezca PYTHONWARNINGS=ignore antes de iniciar Python. También puede filtrar una categoría de advertencias o usar un administrador de contexto para suprimir mensajes solo en un bloque determinado.

Las advertencias señalan situaciones que pueden requerir atención, como el uso de una API obsoleta. Por sí solas no detienen la ejecución, mientras que las excepciones representan fallos en tiempo de ejecución que pueden interrumpir una operación concreta o propagarse si no se controlan. Lea la advertencia antes de ocultarla: suprimirla puede encubrir un problema de compatibilidad que importe más adelante.

Suprimir advertencias con el módulo warnings

El módulo warnings de la biblioteca estándar permite que un script filtre mensajes. Llame a warnings.filterwarnings("ignore") para ignorar de forma general las advertencias del proceso, o indique criterios como una categoría o un mensaje para seleccionar un subconjunto. Los filtros afectan a las advertencias que coinciden con ellos; las demás siguen visibles. Coloque un filtro específico cerca del código que lo necesita y quítelo cuando haya resuelto el problema de fondo.

Ejecute este ejemplo autónomo:

import warnings

warnings.filterwarnings("ignore", category=UserWarning, message="cache is stale")
warnings.warn("cache is stale", UserWarning)
print("program continues")
program continues

El filtro coincide con mensajes UserWarning que empiezan por el texto indicado, por lo que la advertencia coincidente queda oculta. La última instrucción print muestra program continues —la etiqueta se conserva en inglés— y demuestra que la ejecución continúa después de la llamada que genera la advertencia.

Para aplicar un filtro temporal, use warnings.catch_warnings() e instale el filtro dentro de su bloque with. Al salir del bloque, Python restaura el estado de los filtros de advertencias que estaba activo al entrar. Esto resulta útil alrededor de una operación que se sabe que genera ruido cuando se quiere mantener la política habitual de advertencias en el resto del código. Por ejemplo, el patrón es with warnings.catch_warnings(): warnings.simplefilter("ignore", category=DeprecationWarning); operation(). Mantenga la operación dentro del bloque; las llamadas posteriores usan los filtros restaurados.

Suprimir advertencias desde la línea de comandos

Pase la opción -W de Python antes del nombre del script para establecer un filtro de advertencias al iniciar el intérprete. Para ignorar las advertencias de ese proceso, ejecute python -W ignore script.py o la forma compacta equivalente python -Wignore script.py. La forma protegida -Wignore es la opción seguida inmediatamente por la acción ignore. Sustituya script.py por el nombre de su archivo y mantenga después los argumentos del script.

Esta opción se aplica cuando se inicia el intérprete y no modifica el script. Es útil al ejecutar una herramienta que no puede cambiar o al hacer una invocación puntual. Un filtro de línea de comandos puede ocultar diagnósticos útiles durante toda la ejecución, así que prefiera un filtro específico para una categoría cuando una supresión general oculte información que necesita.

Suprimir advertencias con la variable de entorno PYTHONWARNINGS

Establezca PYTHONWARNINGS antes de iniciar Python para proporcionar acciones de filtrado de advertencias al nuevo proceso. Por ejemplo, en un shell POSIX use PYTHONWARNINGS=ignore python script.py; en PowerShell use $env:PYTHONWARNINGS = "ignore" y luego ejecute python script.py. Estas asignaciones dependen del shell, y la variable debe estar en el entorno cuando se inicie el intérprete.

La configuración del entorno resulta útil cuando un lanzador o el entorno de despliegue controla el proceso. Afecta a los procesos de Python iniciados con ese entorno; no cambia la política de advertencias de un intérprete que ya está en ejecución. Quite la variable o establezca un filtro más específico cuando quiera volver a ver las advertencias. Con cualquiera de los tres métodos, suprima solo los mensajes que haya evaluado y revise el filtro a medida que cambien las dependencias y las API.