[Python-Dev] Revised PEP 349: Allow str() to return unicode strings

Dieter Maurer dieter at handshake.de
Wed Aug 24 21:11:18 CEST 2005

The following message is a courtesy copy of an article
that has been posted to comp.lang.python as well.

Neil Schemenauer <nas at arctrix.com> writes on Mon, 22 Aug 2005 15:31:42 -0600:
> ...
>     Some code may require that str() returns a str instance.  In the
>     standard library, only one such case has been found so far.  The
>     function email.header_decode() requires a str instance and the
>     email.Header.decode_header() function tries to ensure this by
>     calling str() on its argument.  The code was fixed by changing
>     the line "header = str(header)" to:
>         if isinstance(header, unicode):
>             header = header.encode('ascii')

Note, that this is not equivalent to the old "str(header)":

  "str(header)" used Python's "default encoding" while the
  new code uses 'ascii'.

  The new code might be more correct than the old one has been.

> ...
> Alternative Solutions
>     A new built-in function could be added instead of changing str().
>     Doing so would introduce virtually no backwards compatibility
>     problems.  However, since the compatibility problems are expected to
>     rare, changing str() seems preferable to adding a new built-in.

Can we get a new builtin with the exact same behaviour as
the current "str" which can be used when we do require an "str"
(and cannot use a "unicode").


More information about the Python-Dev mailing list