traduccion - Cómo deshabilitar las advertencias de Python
warnings examples (6)
Estoy trabajando con el código con muchas advertencias inútiles (para mí en este momento) usando la biblioteca de warnings
. Al leer (/ escanear) la documentación, solo encontré una manera de deshabilitar 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?
¿ Miraste la sección de suprimir las advertencias de los documentos de python?
Si está utilizando un código que sabe que generará una advertencia, como una función en desuso, 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()
No lo apruebo, pero 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
Esta es una pregunta antigua, pero hay algunas pautas nuevas en PEP 565 que para desactivar todas las advertencias, si está escribiendo una aplicación de 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 de forma predeterminada, pero de manera crucial permite que se vuelvan a PYTHONWARNINGS
a través de python -W
en la línea de comandos o PYTHONWARNINGS
.
Hay la opción -W .
python -W ignore foo.py
Puede usar este código en la parte superior de main.py:
def warn(*args, **kwargs):
pass
import warnings
warnings.warn = warn
También puede definir una variable de entorno (nueva característica en 2010 - ie python 2.7)
export PYTHONWARNINGS="ignore"
Prueba como esta: Predeterminado
$ export PYTHONWARNINGS="default"
$ python
>>> import warnings
>>> warnings.warn(''my warning'')
__main__:1: UserWarning: my warning
>>>
Ignorar las advertencias
$ export PYTHONWARNINGS="ignore"
$ python
>>> import warnings
>>> warnings.warn(''my warning'')
>>>
las advertencias se emiten a través de stderr y la solución simple es agregar ''2> / dev / null'' a la CLI. Esto tiene mucho sentido para muchos usuarios, como aquellos con centos 6 que están atascados con las 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 aún está en su lugar, pero todo lo que desea es portado. la redirección de stderr lo dejará con una salida de terminal / shell limpia, aunque el contenido de la salida estándar en sí no cambia.
respondiendo a FriendFX. La oración uno (1) responde directamente al problema con una solución universal. la oración dos (2) toma en cuenta el anclaje citado re ''deshabilita las advertencias'' que es específico de python 2.6 y señala que los usuarios de RHEL / centos 6 no pueden prescindir directamente de 2.6. aunque no se citaron advertencias específicas, en el párrafo dos (2) se responde la pregunta 2.6. Con más frecuencia, se trata de las fallas en el módulo de criptografía y cómo se puede "modernizar" (es decir, actualizar, backport, corregir) el rendimiento HTTPS / TLS de python . el párrafo tres (3) simplemente explica el resultado de usar la redirección y la actualización del módulo / dependencias.