[Tutor] lib2to3 fixers

Steven D'Aprano steve at pearwood.info
Sun Jun 13 05:03:32 CEST 2010


On Sat, 12 Jun 2010 05:27:39 am Zubin Mithra wrote:
> Hey everyone,
>
> I just discovered that the following construct does not work in Py3k.
>
> >>> string.maketrans('-', '_')

Like the error message says, you have to use bytes, which I grant is 
counter-intuitive, but it does work:


>>> table = string.maketrans(b'-', b'_')
>>> 'abc-def'.translate(table)
'abc_def'


(Perhaps it shouldn't though... it seems to be an undocumented feature.)



> However, the following works,
>
> >>> str.maketrans('-', '_')
>
> When i try to convert a python module containing the above construct,
> it does not get modified in a way such that it could run on Python
> 3.0

I think this should be reported as a bug/feature request on the bug 
tracker. Having 2to3 be as extensive as possible is a high priority to 
the Python development team.

http://bugs.python.org/


> 1. replace string.maketrans() with a function which is compatible in
> both Python 2.x and 3.0 ; as of now I`m unaware of such a construct.

That at least is easy.

def maketrans(a, b):
    try:
        return string.translate(a, b)
    except TypeError:
        return str.translate(a, b)



> 2. write a fixer for doing this which I could use. I could`nt find
> any good tutorials out there on writing fixers, i`d be grateful if
> you could point me to any.

For that you probably need to ask on the main Python mailing list or 
newsgroup:

comp.lang.python
http://mail.python.org/mailman/listinfo/python-list




-- 
Steven D'Aprano


More information about the Tutor mailing list