Python 3.5, bytes, and %-interpolation (aka PEP 461)

Marko Rauhamaa marko at pacujo.net
Mon Feb 24 21:46:37 CET 2014


Ethan Furman <ethan at stoneleaf.us>:

> Can anybody think of a use-case for this particular feature?

Internet protocol entities constantly have to format (and parse)
ASCII-esque octet strings:

    headers.append(b'Content-length: %d\r\n' % len(blob))

    headers.append(b'Content-length: {}\r\n'.format(len(blob)))

Now you must do:

    headers.append(('Content-length: %d\r\n' % len(blob)).encode())

    headers.append('Content-length: {}\r\n'.format(len(blob)).encode())

That is:

 1. ineffient (encode/decode shuffle)

 2. unnatural (strings usually have no place in protocols)

 3. confusing (what is stored as bytes, what is stored as strings?)

 4. error-prone (UTF-8 decoding exceptions etc)


To be sure, %s will definitely be needed as well:

   uri = b'http://%s/robots.txt' % host


Marko



More information about the Python-list mailing list