How to define a bytes literal in Python 2.x for porting to Python 3.x using 2to3?

Stefan Behnel stefan_ml at behnel.de
Sat Jan 1 05:57:08 EST 2011


Terry Reedy, 01.01.2011 11:08:
> On 1/1/2011 4:08 AM, Baptiste Lepilleur wrote:
>
>> Is there a way to mark string literals so that 2to3 automatically
>> prefixes them with 'b'? Is there a simpler trick?
>
> Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit
> (Intel)] on win32
> Type "copyright", "credits" or "license()" for more information.
>  >>> b=b'abc'
>  >>> b
> 'abc'
>
> The b prefix does nothing in 2.7. It was specifically added for this type
> of porting problem.

More precisely, it was added in Python 2.6, so older Python versions will 
consider it a syntax error.

To support older Python versions, you need to write your own wrapper 
functions for bytes literals that do nothing in Python 2 and convert the 
literal back to a bytes literal in Python 3. That's ugly, but there's no 
other way to do it.

Stefan




More information about the Python-list mailing list