[Python-Dev] PEP 460 reboot (original) (raw)

Eric V. Smith eric at trueblade.com
Mon Jan 13 23:25:50 CET 2014


On 1/13/2014 4:59 PM, Guido van Rossum wrote:

On Mon, Jan 13, 2014 at 1:29 PM, Glenn Linderman <v+python at g.nevcal.com> wrote:

If somehow (unlikely though it seems) we end up keeping %s (e.g. strictly to ease porting), we could also keep %r as an alias for %a.

%s for strictly interpolating bytes eases porting. Sad name, but good for compatibility. When the blowup happens, due to having a str type passed, the porter adds the appropriate .encode(...) to the parameter, so it doesn't blow up on Py 3, and it'll be OK for Py 2 as well, will it not? Lots of code uses %s with numbers too, and probably the occasional None or list (relying on the Python 2 near-guarantee that most objects' str() is their repr() and that repr() nearly guarantees to return only ASCII). E.g. I'm sure you can find live code doing something like headers.append('Content-Length: %s\r\n' % len(body))

That's why I think we should support %s taking bytes, int, float. And make %b mean the same thing, if you want. But I think we need to keep %s (however limited) for compatibility with Python 2.

Personally, I'd be okay with %s not accepting str (by raising an exception).

I think that would give us a large "compatibility surface" in common with Python 2.

Eric.



More information about the Python-Dev mailing list