53 lines
1.9 KiB
ReStructuredText
53 lines
1.9 KiB
ReStructuredText
|
limitations of the ``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__
|
||
|
|
||
|
|
||
|
Limitations of the ``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.3
|
||
|
|
||
|
- ``raise ... 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 :ref:`bytes-object` for more information.
|
||
|
|
||
|
|
||
|
Notes
|
||
|
-----
|
||
|
- Ensure you are using new-style classes on Py2. Py3 doesn't require
|
||
|
inheritance from ``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.
|