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

Terry Reedy tjreedy at udel.edu
Sat Jan 1 15:10:44 EST 2011


On 1/1/2011 5:57 AM, Stefan Behnel wrote:
> 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.

'so' here means 'as a consequence' rather than 'with the intention' ;-).

> 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.

I think the developers expected that most maintained and updated 2.x 
code, especially code targeted at 3.x also, would be migrated to 2.6+.

-- 
Terry Jan Reedy




More information about the Python-list mailing list