Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #32739
| From | Terry Reedy <tjreedy@udel.edu> |
|---|---|
| Subject | Re: __unicode__() works, unicode() blows up. (Never mind!) |
| Date | 2012-11-04 13:10 -0500 |
| References | <roy-90D9A2.08321804112012@news.panix.com> <roy-30BA92.08410804112012@news.panix.com> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.3261.1352052676.27098.python-list@python.org> (permalink) |
On 11/4/2012 8:41 AM, Roy Smith wrote:
> In article <roy-90D9A2.08321804112012@news.panix.com>,
> Roy Smith <roy@panix.com> wrote:
>
>>>>> print u.__unicode__()
>> None
>>
>>>>> print unicode(u)
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in <module>
>> TypeError: coercing to Unicode: need string or buffer, NoneType found
>>
>> What's going on here? I thought
>> (http://docs.python.org/2/library/functions.html#unicode) the latter two
>> calls should be identical, but obviously they're not.
>
> Why is it, that no matter how long you stare at a problem, the answer
> comes to you moments after you hit the Post button? :-)
>
> The problem is that __unicode__() is supposed to return a Unicode
> object, and unicode() enforces that. The fix is to change:
>
> def __unicode__(self):
> return self.username
>
> to be:
>
> def __unicode__(self):
> return unicode(self.username)
>
> This never got noticed before because normally, self.username already is
> a unicode string, so it just works.
The same principle applies to some of the other special methods that sit
behind builtin functions.
>>> class C:
def __len__(self): return '42' # whoops
>>> len(C())
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
len(C())
TypeError: 'str' object cannot be interpreted as an integer
>>> class C:
def __len__(self): return -42 # whoops again
>>> len(C())
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
len(C())
ValueError: __len__() should return >= 0
--
Terry Jan Reedy
Back to comp.lang.python | Previous | Next — Previous in thread | Find similar | Unroll thread
__unicode__() works, unicode() blows up. Roy Smith <roy@panix.com> - 2012-11-04 08:32 -0500
Re: __unicode__() works, unicode() blows up. (Never mind!) Roy Smith <roy@panix.com> - 2012-11-04 08:41 -0500
Re: __unicode__() works, unicode() blows up. (Never mind!) aahz@pythoncraft.com (Aahz) - 2012-11-04 09:13 -0800
Re: __unicode__() works, unicode() blows up. (Never mind!) Terry Reedy <tjreedy@udel.edu> - 2012-11-04 13:10 -0500
csiph-web