Re: __unicode__() works, unicode() blows up. (Never mind!)
In article roy-90d9a2.08321804112...@news.panix.com, Roy Smith r...@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. -- http://mail.python.org/mailman/listinfo/python-list
Re: __unicode__() works, unicode() blows up. (Never mind!)
In article roy-30ba92.08410804112...@news.panix.com, Roy Smith r...@panix.com wrote: In article roy-90d9a2.08321804112...@news.panix.com, Roy Smith r...@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. You apparently need more coffee when programming after waking up! (Or even worse, staying up all night.) -- Aahz (a...@pythoncraft.com) * http://www.pythoncraft.com/ Normal is what cuts off your sixth finger and your tail... --Siobhan -- http://mail.python.org/mailman/listinfo/python-list
Re: __unicode__() works, unicode() blows up. (Never mind!)
On 11/4/2012 8:41 AM, Roy Smith wrote: In article roy-90d9a2.08321804112...@news.panix.com, Roy Smith r...@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 -- http://mail.python.org/mailman/listinfo/python-list