[Python-Dev] unicode inconsistency?

Tim Peters tim.peters at gmail.com
Thu Sep 9 21:11:51 CEST 2004


[Neil Schemenauer]
> ...
> I suspect the fix will be pretty straight forward (call tp_str and
> if the result is 'unicode' the produce a 'unicode' string).  Again,
> is there some reason why we don't want this behavior?

Yes:  '%s' is documented as "String (converts any python object using
str())".  It's str(A()) that raises the exception you're seeing, not
interpolation.  To worm around that, you'll effectively have to
duplicate PyObject_Str's implementation (which is more than just
calling tp_str -- that may not exist -- you'll end up at least
duplicating PyObject_Repr's implementation too) inside
PyString_Format(), and end up with a mess that's harder to explain
too.

The *real* problem (IMO) is that we don't have a format code that
means "stick the unicode representation here", i.e. there's no format
code that triggers PyObject_Unicode() directly.  unicode.__mod__
treats '%s' that way, but that isn't documented.


More information about the Python-Dev mailing list