[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

Re: Short confusing example with unicode, print, and __str__

Gary Herron

3/5/2008 6:53:00 PM

Gerard Brunick wrote:
> I really don't understand the following behavior:
>
> >>> class C(object):
> ... def __init__(self, s): self.s = s
> ... def __str__(self): return self.s
> ...
> >>> cafe = unicode("Caf\xe9", "Latin-1")
> >>> c = C(cafe)
> >>> print "Print using c.s:", c.s
> Print using c.s: Café
> >>> print "Print using just c:", c
> Print using just c: Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in
> position 3: ordinal not in range(128)
> >>> str(c)
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in
> position 3: ordinal not in range(128)
>
> Why would "print c.s" work but the other two cases throw an exception?
> Any help understanding this would be greatly appreciated.
>
> Thanks in advance,
> Gerard
>
It's the difference between how __str__ and __repr__ act on strings.

Here's s simpler example

>>> d=unicode("Caf\xe9", "Latin-1")
>>> repr(d)
"u'Caf\\xe9'"
>>> str(d)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in
position 3: ordinal not in range(128)

Gary Herron