[pyar] error de encoding al loguear con parametros
Javier Marcon
javiermarcon en gmail.com
Mie Oct 22 23:38:33 ART 2014
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
More information about the pyar
mailing list