[Python-Dev] [Fwd: In Python 2.6, bytes is str]

Guido van Rossum guido at python.org
Tue Oct 7 22:13:38 CEST 2008


On Sun, Oct 5, 2008 at 11:43 PM, Steve Holden <steve at holdenweb.com> wrote:
> This does make it look rather as though bytes == str was a decision
> whose consequences weren't fully appreciated before implementation.
>
> Was this horror anticipated?

It was well understood that the bytes "type" in 2.6 and the bytes type
in 3.0 would behave quite different. Attempts to come up with a
separate bytes type that behaved more like its 3.0 counterpart were
doomed, because there just are too many places where the usage was
ambiguous. We should probably have written a PEP about this just to
prevent the discussion from being repeated all over again in this
thread.

The only two anticipated *reasonable* uses in 2.6 were the bytes
literal (b'abc') and tests for isinstance(x, bytes), which are flags
for 2to3 to keep these usages as bytes, not str.

I have no intention of rolling this back. It isn't compatible with
3.0, but then, 2.6 and 3.0 aren't in general meant to be compatible --
2.6 is a stepping stone, but that's not the same thing. It is
backwards compatible with prior versions because it is new in 2.6, so
it shouldn't break old code. I have only limited sympathy for people
who don't read documentation in this case.

--Guido

> -------- Original Message --------
> Subject: In Python 2.6, bytes is str
> Date: Sun, 05 Oct 2008 22:30:17 -0700
> From: Bryan Olson <fakeaddress at nowhere.org>
> Organization: at&t http://my.att.net/
> To: python-list at python.org
> Newsgroups: gmane.comp.python.general
>
>
> Python 3 has the 'bytes' type, which the string type I've long wanted in
> various languages. Among other advantages, it is immutable, and
> therefore bytes objects can be dict keys. There's a mutable version too,
> called "bytearray".
>
> In Python 2.6, the name 'bytes' is defined, and bound to str. The 2.6
> assignment presents some pitfalls. Be aware.
>
> Consider constructing a bytes object as:
>
>    b = bytes([68, 255, 0])
>
> In Python 3.x, len(b) will be 3, which feels right.
>
> In Python 2.6, len(b) will be  12, because b is the str, '[68, 255, 0]'.
>
>
> I'm thinking I should just avoid using 'bytes' in Python 2.6. If there's
>  another Python release between 2.6 and 3.gold, I'd advocate removing
> the pre-defined 'bytes', or maybe defining it as something else.
>
>
> --
> --Bryan
> --
> http://mail.python.org/mailman/listinfo/python-list
>
>
> --
> Steve Holden        +1 571 484 6266   +1 800 494 3119
> Holden Web LLC              http://www.holdenweb.com/
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/guido%40python.org
>



-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-Dev mailing list