[pyar] Haciendo que logging se banque mis errores... de forma piola

Juanjo Conti jjconti en gmail.com
Vie Ago 20 19:07:47 ART 2010


 El 20 de agosto de 2010 22:15, Facundo Batista
<facundobatista en gmail.com>escribió:

>
> Lo que quiero lograr es que lo que me muestre por stderr sea algo
> útil. Al menos que me diga *cual* fue el mensaje que no pudo
> formatear, de manera que yo lo pueda buscar en mi sistema, y
> corregirlo.
>
> ¿Ideas?


Mi primer idea fue aplicarle un decorador a logger.error que haga lo que vos
querías, algo como:

def catchit(f):
    def inner(*a, **kw):
        try:
            return f(*a, **kw)
        except Exception as e:
            print e, a, kw
    return inner

pero cuando lo ejecuté con algo que lanzaba una excepción, vi el mismo
mensaje de error que vos. Miré el código fuente de
/usr/lib/python2.6/logging/__init__.py y efectivamente confirmé mis
sospechas: se está capturando la excepción devido al formateo incorrecto ahí
dentro y se la terminan pasando a self.handleError.

Entonces hice:

>>> def he(record):
...     raise sys.exc_info()[1]

>>> stdout_handler.handleError=he

Y ahora si anda mi decorador como quiero:

>>> logger.error('a', 5)
not all arguments converted during string formatting ('a', 5) {}

El decorador es mejorable y leyendo un poco más el código fuente de logging
capás que se encuentra otra forma de hacerlo, pero por ahí debe andar la
perdiez. Tengo que salir ahora, a la vuelta miro un poco más.

Salutes!

-- 
Juanjo Conti
blog: http://www.juanjoconti.com.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20100821/a001d4b8/attachment.html>


More information about the pyar mailing list