File: limitations.rst

package info (click to toggle)
python-future 0.18.2-6
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 4,264 kB
  • sloc: python: 43,246; makefile: 136; sh: 29
file content (52 lines) | stat: -rw-r--r-- 1,929 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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.