Short confusing example with unicode, print, and __str__

Gerard Brunick gbrunick at andrew.cmu.edu
Wed Mar 5 12:59:19 EST 2008


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



More information about the Python-list mailing list