[pyar] Una consulta mas sobre unicode

fisa fisadev en gmail.com
Vie Ene 10 19:19:42 ART 2014


El día 10 de enero de 2014, 18:56, Nicolás Rebagliati
<nicolas.rebagliati en aenima-x.com.ar> escribió:
> Si es python 2.
> no esta usando __future__

Pero entonces, por qué usas print con ()? En python 2, print no lleva
() (salvo que traigas print_function de __future__).
Si le ponés () en algunos casos va a hacer lo que esperás, porque 1 es
lo mismo que (1).
Y por eso
    print 1
te va a funcionar igual que
    print (1)
y
    print(1)
No porque print sea una función, sino porque 1 == (1).
De la misma forma,
    a = 1
hace lo mismo que
    a = (1)

Pero si tenés más de un elemento, ya verías que no es lo mismo.
Ej:
    print 1, 2
te va a dar algo distinto a
    print(1, 2)
En el primer caso interpreta "print con dos parámetros, el número 1 y
el número 2".
En el segundo caso interpreta "print con un parámetro, la tupla (1, 2)"

> Si, lo que te pongo es copiado del codigo.
>
> Te lo paso en limpio.
>
> por consola:
>
> In [3]: type(stp.name)
> Out[3]: unicode
>
> In [4]: print(u"Nombre {0}".format(stp.name))
> Nombre STP Añazco
>
>
> En django:
>         try:
>             print(type(stp.name))
>             print(u"Nombre {0}".format(stp.name))
>         except Exception as e:
>             print(e)
>
> esta es la salida:
> <type 'unicode'>
> 'ascii' codec can't encode character u'\xf1' in position 12: ordinal not in
> range(128)
>
> Pero si hago el encode:
>         try:
>             print(type(stp.name))
>             print(u"Nombre {0}".format(stp.name).encode('utf-8'))
>         except Exception as e:
>             print(e)
>
> Salida:
> <type 'unicode'>
> Nombre STP Añazco
>

Bueno, intento reproducir el problema acá, y no me pasa, así que
quisiera ver un poco más que solo el mensaje de error y el type.

Así que te recomiendo sacar ese try/except, poner en tu settings
DEBUG=True, y dejar que se dispare la excepción.
Si la excepción se dispara en debug, django te va a mostrar un montón
de info de lo que pasó, como el stacktrace completo, lugar donde
ocurrió el problema, valores de las variables, etc, que nos van a
ayudar a entender el tema.
Haciendo ese try/except te impedís ver toda esa info, y solo imprimís
el mensaje de error, que no es suficiente.
Así que sacale el try/except, y subí a algún lado toda la info
completa que django da con el error, así entiendo un poco más lo que
intenta hacer y con qué datos.

Saludos!

>
> No entiendo porque en la consola me usa (aparentemente) utf-8 como encoding
> y django ASCII
>
>
> On Jan 10, 2014, at 6:15 PM, Nicolás Rebagliati
> <nicolas.rebagliati en aenima-x.com.ar> wrote:
>
> Listo, ya encontre el problema.
> En lugar de encodear el unicode del format tenia que encodear al unicode
> resultante
> print(u"Nombre {0}".format(stp.name).encode('utf-8'))
>
> ahi si funciona.
>
> porque sera que en la consola me funciona y en django no??
> Me esta tomando ASCII como default encoding no?
>
> lo raro es que el .py tiene el header
> # -*- coding: utf-8 -*-
>
>
> On Jan 10, 2014, at 6:09 PM, Nicolás Rebagliati
> <nicolas.rebagliati en aenima-x.com.ar> wrote:
>
>
> Y en el ejemplo específico que te explota:
>
> print(u"{0}".format(x.name.encode('utf-8')))
>
> Fijate que estás intentando meter un string encodeado (
> x.name.encode('utf-8') ) dentro de un objeto unicode ( u"{0}" ).
> Si x.name es un unicode, con qué objetivo lo encodeás, si lo querés
> meter dentro de otro unicode?
>
> Saludos!
>
> --
> fisa  -  Juan Pedro Fisanotti
> _______________________________________________
> 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
>
>
> Si eso que decis, es verdad..pero me pasa igual..lo raro es que me pasas
> desde django, si lo hago por consola va todo ok:
>
> In [6]: type(stp.name)
> Out[6]: unicode
>
> In [7]: print(u"{0}".format(stp.name))
> STP Añazco
>
>
> pero si lo hago desde django:
>
>        print(type(stp.name))
>        print(u"Nombre {0}".format(stp.name))
>
> <type 'unicode'>
>
> 'ascii' codec can't encode character u'\xf1' in position 12: ordinal not in
> range(128)
>
>
>
>
> _______________________________________________
> 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



-- 
fisa  -  Juan Pedro Fisanotti


More information about the pyar mailing list