ATIX21

Page 53

import warnings import logging logging.basicConfig(level=logging.INFO) def manda_advertencias_al_registro(message, category, filename, lineno, file=None): logging.warning( '%s:%s: %s:%s' % (filename, lineno, category.__name__, message)) return old_showwarning = warnings.showwarning warnings.showwarning = manda_advertencias_al_registro warnings.warn('Este es un mensaje de advertencia')

Así, cuando warn() es ejecutada, las advertencias son emitidas con el resto de los mensajes de registro. $ python warnings_showwarning.py WARNING:root:warnings_showwarning.py:24: UserWarning: Este es un mensaje de advertencia

Formato Si está bien que las advertencias vayan a stderr, pero no te gusta el formato, puedes reemplazar formaatwarning(). import warnings def advertencia_en_una_linea(message, category, filename, lineno, file=None, line=None): return ' %s:%s: %s:%s' % (filename, lineno, category.__name__, message) warnings.warn('Este es un mensaje de advertencia, antes') warnings.formatwarning = advertencia_en_una_linea warnings.warn('Este es un mensaje de advertencia, después') $ python warnings_formatwarning.py warnings_formatwarning.py:15: UserWarning: Este es un mensaje de advertencia, antes warnings.warn('Este es un mensaje de advertencia, después') warnings_formatwarning.py:17: UserWarning: Este es un mensaje de advertencia, después

Niveles de pila en advertencias Notarás que por defecto el mensaje de advertencia incluye la línea de código que lo generó, cuando está disponible. Pero no es del todo útil ver la línea de código con mensaje de advertencia real. En su lugar, puedes decir a warn() qué tan lejos tiene que ir para encontrar la línea que ejecutó la función que contiene la advertencia. De ésta manera los usuarios de una función obsoleta ven dónde se ejecuta la función en vez de la implementación de la función.


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.