future
module and differences between Py2 and Py3 that are not (yet) handled¶The following attributes on functions in Python 3 are not provided in Python 2.7:
__func__: see six.get_method_function() __self__: see six.get_method_self() __self__.__class__
futurize
script¶The futurize
script is not yet mature; like 2to3
, on which it is based,
it makes mistakes. Nevertheless, it should be useful for automatically
performing a lot of the repetitive code-substitution tasks when porting from
Py2 to Py2/3.
Some new Python 3.3 features that cause SyntaxErrors on earlier versions
are not currently handled by the futurize
script. This includes:
yield ... from
syntax for generators in Py3.3raise ... from
syntax for exceptions. (This is simple to fix
manually by creating a temporary variable.)Also:
Usage of file('myfile', 'w')
as a synonym for open
doesn’t seem
to be converted currently.
isinstance(var, basestring)
should sometimes be converted to
isinstance(var, str) or isinstance(var, bytes)
, or sometimes simply
isinstance(var, str)
, depending on the context. Currently it is always
converted to isinstance(var, str)
.
Caveats with bytes indexing!:
b'\x00'[0] != 0
b'\x01'[0] != 1
futurize
does not yet wrap all byte-string literals in a bytes()
call. This is on the to-do list. See bytes for more information.
object
for this, but Py2 does. pasteurize
adds this back in automatically, but ensure you do this too
when writing your classes, otherwise weird breakage when e.g. calling
super()
may occur.