[Python-ideas] Stop displaying elements of bytes objects as printable ASCII characters in CPython 3

Chris Angelico rosuav at gmail.com
Thu Sep 11 02:42:41 CEST 2014


On Thu, Sep 11, 2014 at 4:35 AM, Chris Lasher <chris.lasher at gmail.com> wrote:
> Unless printable representation of bytes objects appears as part of
> the language specification for Python 3, it's an implementation
> detail, thus, it is a candidate for change, especially if the BDFL
> wills it so.

So this is all about the output of repr(), right? The question then
is: How important is backward compatibility with repr? Will there be
code breakage?

I've generally considered repr() to be exclusively "take this object
and turn it into something a human can use".Nothing about what the
exact string returned is. Something like this description:

"""Any value, debug style. Do not rely on the exact formatting; how
the result looks can vary depending on locale, phase of the moon or
anything else the lfun::_sprintf() method implementor wanted for
debugging."""

(Replace lfun::_sprintf() with __repr__() for that to make sense for Python.)

If repr's meant to be treated that way, then there's no problem
changing bytes.__repr__ to produce hex-only output in 3.5 or 3.6. If
it's NOT meant to be treated as opaque (and I've seen some Stack
Overflow posts where people are parsing repr()), then what is the
guarantee?

ChrisA


More information about the Python-ideas mailing list