python - traduccion - Imprime solo el mensaje en advertencias
warnings examples (4)
Estoy emitiendo muchas advertencias en un validador, y me gustaría suprimir todo en la salida estándar excepto el mensaje que se proporciona a warnings.warn()
.
Es decir, ahora veo esto:
./file.py:123: UserWarning: My looong warning message
some Python code
Me gustaría ver esto:
My looong warning message
Edición 2: Al anular las warnings.showwarning()
Shwarwarning warnings.showwarning()
resultó funcionar:
def _warning(
message,
category = UserWarning,
filename = '''',
lineno = -1):
print(message)
...
warnings.showwarning = _warning
warnings.warn(''foo'')
Esto es lo que estoy haciendo para omitir solo la línea del código fuente. Esto es, en general, como lo sugiere la documentación, pero fue un poco difícil averiguar qué cambiar exactamente. (En particular, traté de varias maneras de mantener la línea de origen fuera de showwarnings
pero no pude hacer que funcionara como quería).
# Force warnings.warn() to omit the source code line in the message
formatwarning_orig = warnings.formatwarning
warnings.formatwarning = lambda message, category, filename, lineno, line=None: /
formatwarning_orig(message, category, filename, lineno, line='''')
El simple paso de la line=None
haría que Python usara el filename
y lineno
para calcular un valor para la line
automática, pero al pasar una cadena vacía se corrige eso.
Monkeypatch warnings.showwarning()
con su propia función personalizada.
Siempre hay monkeypatching:
import warnings
def custom_formatwarning(msg, *args, **kwargs):
# ignore everything except the message
return str(msg) + ''/n''
warnings.formatwarning = custom_formatwarning
warnings.warn("achtung")
Utilice el módulo de registro en lugar de warnings
.