[pyar] error de encoding al loguear con parametros

Tomas Zulberti tzulberti en gmail.com
Jue Oct 23 06:27:42 ART 2014


Hola.

Todavia no me fije muy bien los otros errores, pero en el (5) tenes lo
siguente mal:

 getattr(logging, nivel)(extra={'data': self.data},
                                argum,
                                **kwargs)

Deberia ser "*argum". El error te los esta tirando porque tenes un
keyword arg (extra), y despues tenes argum que te lo esta tomando como
un parametro comun.

Saludos,
TZ

2014-10-22 23:38 GMT-03:00 Javier Marcon <javiermarcon en gmail.com>:
> Hola, yo tengo una función (*1) que loguea en un archivo todos los
> mensajes que le mando, pudiendo dividir el mensaje en varios parámetros
> (*2), especificándole el nivel y funciona correctamente la mayoría de
> las veces. El tema es que a veces da un error de que no puede
> decodificar un carácter del mensaje (*3) y por eso hice una función
> llamada codificar que hace un str(valor).decode() si el parámetro hereda
> de basestring. El tema es que con el método modificado para que me use
> esa función (*4), al querer hacerlo me tira otro error (*5). Como puedo
> hacer para que me ejecute la funcion en cada parámetro que recibe en
> *pargs ?
>
> Gracias,
>
> Javier.
>
> (*1):
> import logging
>     def mensaje(self, nivel, *pargs, **kwargs):
>         try:
>             getattr(logging, nivel)(extra=
>                     {'data': self.data}, *pargs, **kwargs)
>         except AttributeError:
>             print "no existe el nivel '%s' para loguear" % nivel
>             self.__class__.logger.error(extra={'data': self.data},
>                                     *pargs, **kwargs)
>
>
> (*2):
>
> la = Loguear("primer lista")
> la.mensaje("info","linea a loguear")
> la.mensaje("warn","El %s %s en un %s", "perro", "caminaba", "la corniza")
> lb = Loguear("segunda lista")
> lb.mensaje("debug","linea a loguear.")
> lb.mensaje("warn","El %s %s en un %s", "gato", "maullaba", "solo grito")
>
>
> (*3):
> Traceback (most recent call last):
>   File "C:\Python27\lib\logging\__init__.py", line 874, in emit
>     stream.write(fs % msg.encode("UTF-8"))
>   File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
>     return codecs.utf_8_decode(input, errors, True)
> UnicodeDecodeError: 'utf8' codec can't decode byte 0xf3 in position 316:
> invalid continuation byte
> Logged from file loguear.py, line 24
>
> (*4):
> import logging
> def mensaje(self, nivel, *pargs, **kwargs):
>         try:
>             argum = []
>             for arg in pargs:
>                 argum.append(codificar(arg))
>
>             getattr(logging, nivel)(extra=
>                     {'data': self.data}, argum, **kwargs)
>         except AttributeError:
>             print "no existe el nivel '%s' para loguear" % nivel
>             logging.error(extra={'data': self.data},
>                                     *pargs, **kwargs)
>
>
> (*5):
>   File "C:\Users\Administrador\proyecto\loguear.py", line 29
>     {'data': self.data}, argum, **kwargs)
> SyntaxError: non-keyword arg after keyword arg
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar


More information about the pyar mailing list