Imprime solo el mensaje en advertencias

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') 

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 .

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 solo hecho de pasar 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.