Cómo desactivar las advertencias de python


Estoy trabajando con código con lanza un montón de (para mí en este momento) advertencias inútiles utilizando el warnings biblioteca. Leyendo (/escaneando) la documentación solo encontré una manera de desactivar las advertencias para funciones individuales. Pero no quiero cambiar tanto el código.

¿Hay tal vez una bandera como python -no-warning foo.py?

¿Qué recomendarías?

Author: Chris Seymour, 2013-01-22

6 answers

Está la opción -W.

python -W ignore foo.py

 220
Author: Pavel Anossov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-22 16:28:31

¿Has visto la sección suprimir advertencias de los documentos de python?

Si está utilizando código que sabe que generará una advertencia, como una función obsoleta, pero no desea ver la advertencia, entonces es posible suprimir la advertencia utilizando el administrador de contexto catch_warnings:

import warnings

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

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

Yo no lo aprueban, pero que sólo podría suprimir todas las advertencias con esto:

import warnings
warnings.filterwarnings("ignore")

Ex:

>>> import warnings
>>> def f():
...  print('before')
...  warnings.warn('you are warned!')
...  print('after')
>>> f()
before
__main__:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
 277
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-15 15:24:29

También puede definir una variable de entorno (nueva característica en 2010, es decir, python 2.7)

export PYTHONWARNINGS="ignore"

Prueba como esta: Por defecto

$ export PYTHONWARNINGS="default"
$ python
>>> import warnings
>>> warnings.warn('my warning')
__main__:1: UserWarning: my warning
>>>

Ignorar advertencias

$ export PYTHONWARNINGS="ignore"
$ python
>>> import warnings
>>> warnings.warn('my warning')
>>> 
 57
Author: Holger Bille,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-24 15:26:07

Esta es una pregunta antigua, pero hay algunas directrices más nuevas en PEP 565 que para desactivar todas las advertencias si está escribiendo una aplicación python debe usar:

import sys
import warnings

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

La razón por la que se recomienda esto es que desactiva todas las advertencias por defecto, pero fundamentalmente permite que se vuelvan a activar a través de python -W en la línea de comandos o PYTHONWARNINGS.

 22
Author: Chris_Rands,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-06 21:00:29

Las advertencias se emiten a través de stderr y la solución simple es añadir '2> /dev/null' a la CLI. esto tiene mucho sentido para muchos usuarios, como aquellos con centos 6 que están atascados con dependencias de python 2.6 (como yum) y varios módulos están siendo empujados al borde de la extinción en su cobertura.

Esto es especialmente cierto para la criptografía que involucra SNI, etc. se puede actualizar 2.6 para el manejo de HTTPS utilizando el proc en: https://urllib3.readthedocs.io/en/latest/user-guide.html#ssl-py2

La advertencia todavía está en su lugar, pero todo lo que desea está retroadaptado. el redireccionamiento de stderr le dejará con salida de terminal/shell limpia, aunque el contenido stdout en sí no cambia.

Respondiendo a FriendFX. la primera frase (1) responde directamente al problema con una solución universal. la frase dos (2) tiene en cuenta el anclaje citado re 'desactivar advertencias' que es python 2.6 específico y señala que los usuarios de RHEL/centos 6 no pueden prescindir directamente de la versión 2.6. aunque no se citaron advertencias específicas, el párrafo dos (2) responde a la pregunta de la versión 2.6 que con mayor frecuencia se refiere a las deficiencias en el módulo de criptografía y cómo se puede "modernizar" (es decir, actualizar, retroadaptar, corregir) el rendimiento HTTPS/TLS de python. en el párrafo 3 se explica simplemente el resultado de la utilización de la redirección y la actualización del módulo/dependencias.

 1
Author: jvp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-25 00:58:38

Puede utilizar este código en la parte superior de la main.py:

def warn(*args, **kwargs):
    pass
import warnings
warnings.warn = warn
 0
Author: ykpgrr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-13 11:22:43