On Mon, Dec 16, 2019 at 12:00 PM Kyle Stanley
On a related note though, I'm not a fan of this behavior:
str(b'\xc3\xa1') "b'\\xc3\\xa1'"
Passing a bytes object to str() without specifying an encoding seems like a mistake, I honestly don't see how this ("b'\\xc3\\xa1'") would even be useful in any capacity. I would expect this to instead raise a TypeError, similar to passing a string to bytes() without specifying an encoding:
bytes('รก') ... TypeError: string argument without an encoding
I'd much prefer to see something like this:
str(b'\xc3\xa1') ... TypeError: bytes argument without an encoding
Is there some use case for returning "b'\\xc3\\xa1'" from this operation that I'm not seeing? To me, it seems equally, if not more confusing and pointless than returning an empty string from str(errors='strict') or some other combination of *errors* and *encoding* kwargs without passing an object.
ANY object can be passed to str() in order to get some sort of valid printable form. The awkwardness comes from the fact that str() performs double duty - it's both "give me a printable form of this object" and "decode these bytes into text". With an actual bytes object, I always prefer b.decode(...) to str(b, encoding=...). But the one-arg form of str() needs to be able to represent a bytes object in some way, just as it can represent an int, a Fraction, or a list. ChrisA