17db96d56Sopenharmony_ci.. _2to3-reference: 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ci2to3 --- Automated Python 2 to 3 code translation 47db96d56Sopenharmony_ci================================================= 57db96d56Sopenharmony_ci 67db96d56Sopenharmony_ci.. sectionauthor:: Benjamin Peterson <benjamin@python.org> 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ci2to3 is a Python program that reads Python 2.x source code and applies a series 97db96d56Sopenharmony_ciof *fixers* to transform it into valid Python 3.x code. The standard library 107db96d56Sopenharmony_cicontains a rich set of fixers that will handle almost all code. 2to3 supporting 117db96d56Sopenharmony_cilibrary :mod:`lib2to3` is, however, a flexible and generic library, so it is 127db96d56Sopenharmony_cipossible to write your own fixers for 2to3. 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci.. deprecated-removed:: 3.11 3.13 157db96d56Sopenharmony_ci The ``lib2to3`` module was marked pending for deprecation in Python 3.9 167db96d56Sopenharmony_ci (raising :exc:`PendingDeprecationWarning` on import) and fully deprecated 177db96d56Sopenharmony_ci in Python 3.11 (raising :exc:`DeprecationWarning`). The ``2to3`` tool is 187db96d56Sopenharmony_ci part of that. It will be removed in Python 3.13. 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_ci.. _2to3-using: 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ciUsing 2to3 237db96d56Sopenharmony_ci---------- 247db96d56Sopenharmony_ci 257db96d56Sopenharmony_ci2to3 will usually be installed with the Python interpreter as a script. It is 267db96d56Sopenharmony_cialso located in the :file:`Tools/scripts` directory of the Python root. 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_ci2to3's basic arguments are a list of files or directories to transform. The 297db96d56Sopenharmony_cidirectories are recursively traversed for Python sources. 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ciHere is a sample Python 2.x source file, :file:`example.py`:: 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_ci def greet(name): 347db96d56Sopenharmony_ci print "Hello, {0}!".format(name) 357db96d56Sopenharmony_ci print "What's your name?" 367db96d56Sopenharmony_ci name = raw_input() 377db96d56Sopenharmony_ci greet(name) 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ciIt can be converted to Python 3.x code via 2to3 on the command line: 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci.. code-block:: shell-session 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_ci $ 2to3 example.py 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ciA diff against the original source file is printed. 2to3 can also write the 467db96d56Sopenharmony_cineeded modifications right back to the source file. (A backup of the original 477db96d56Sopenharmony_cifile is made unless :option:`!-n` is also given.) Writing the changes back is 487db96d56Sopenharmony_cienabled with the :option:`!-w` flag: 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci.. code-block:: shell-session 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci $ 2to3 -w example.py 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ciAfter transformation, :file:`example.py` looks like this:: 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci def greet(name): 577db96d56Sopenharmony_ci print("Hello, {0}!".format(name)) 587db96d56Sopenharmony_ci print("What's your name?") 597db96d56Sopenharmony_ci name = input() 607db96d56Sopenharmony_ci greet(name) 617db96d56Sopenharmony_ci 627db96d56Sopenharmony_ciComments and exact indentation are preserved throughout the translation process. 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ciBy default, 2to3 runs a set of :ref:`predefined fixers <2to3-fixers>`. The 657db96d56Sopenharmony_ci:option:`!-l` flag lists all available fixers. An explicit set of fixers to run 667db96d56Sopenharmony_cican be given with :option:`!-f`. Likewise the :option:`!-x` explicitly disables a 677db96d56Sopenharmony_cifixer. The following example runs only the ``imports`` and ``has_key`` fixers: 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci.. code-block:: shell-session 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ci $ 2to3 -f imports -f has_key example.py 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ciThis command runs every fixer except the ``apply`` fixer: 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_ci.. code-block:: shell-session 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci $ 2to3 -x apply example.py 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ciSome fixers are *explicit*, meaning they aren't run by default and must be 807db96d56Sopenharmony_cilisted on the command line to be run. Here, in addition to the default fixers, 817db96d56Sopenharmony_cithe ``idioms`` fixer is run: 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci.. code-block:: shell-session 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci $ 2to3 -f all -f idioms example.py 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ciNotice how passing ``all`` enables all default fixers. 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ciSometimes 2to3 will find a place in your source code that needs to be changed, 907db96d56Sopenharmony_cibut 2to3 cannot fix automatically. In this case, 2to3 will print a warning 917db96d56Sopenharmony_cibeneath the diff for a file. You should address the warning in order to have 927db96d56Sopenharmony_cicompliant 3.x code. 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ci2to3 can also refactor doctests. To enable this mode, use the :option:`!-d` 957db96d56Sopenharmony_ciflag. Note that *only* doctests will be refactored. This also doesn't require 967db96d56Sopenharmony_cithe module to be valid Python. For example, doctest like examples in a reST 977db96d56Sopenharmony_cidocument could also be refactored with this option. 987db96d56Sopenharmony_ci 997db96d56Sopenharmony_ciThe :option:`!-v` option enables output of more information on the translation 1007db96d56Sopenharmony_ciprocess. 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ciSince some print statements can be parsed as function calls or statements, 2to3 1037db96d56Sopenharmony_cicannot always read files containing the print function. When 2to3 detects the 1047db96d56Sopenharmony_cipresence of the ``from __future__ import print_function`` compiler directive, it 1057db96d56Sopenharmony_cimodifies its internal grammar to interpret :func:`print` as a function. This 1067db96d56Sopenharmony_cichange can also be enabled manually with the :option:`!-p` flag. Use 1077db96d56Sopenharmony_ci:option:`!-p` to run fixers on code that already has had its print statements 1087db96d56Sopenharmony_ciconverted. Also :option:`!-e` can be used to make :func:`exec` a function. 1097db96d56Sopenharmony_ci 1107db96d56Sopenharmony_ciThe :option:`!-o` or :option:`!--output-dir` option allows specification of an 1117db96d56Sopenharmony_cialternate directory for processed output files to be written to. The 1127db96d56Sopenharmony_ci:option:`!-n` flag is required when using this as backup files do not make sense 1137db96d56Sopenharmony_ciwhen not overwriting the input files. 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ci.. versionadded:: 3.2.3 1167db96d56Sopenharmony_ci The :option:`!-o` option was added. 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_ciThe :option:`!-W` or :option:`!--write-unchanged-files` flag tells 2to3 to always 1197db96d56Sopenharmony_ciwrite output files even if no changes were required to the file. This is most 1207db96d56Sopenharmony_ciuseful with :option:`!-o` so that an entire Python source tree is copied with 1217db96d56Sopenharmony_citranslation from one directory to another. 1227db96d56Sopenharmony_ciThis option implies the :option:`!-w` flag as it would not make sense otherwise. 1237db96d56Sopenharmony_ci 1247db96d56Sopenharmony_ci.. versionadded:: 3.2.3 1257db96d56Sopenharmony_ci The :option:`!-W` flag was added. 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_ciThe :option:`!--add-suffix` option specifies a string to append to all output 1287db96d56Sopenharmony_cifilenames. The :option:`!-n` flag is required when specifying this as backups 1297db96d56Sopenharmony_ciare not necessary when writing to different filenames. Example: 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci.. code-block:: shell-session 1327db96d56Sopenharmony_ci 1337db96d56Sopenharmony_ci $ 2to3 -n -W --add-suffix=3 example.py 1347db96d56Sopenharmony_ci 1357db96d56Sopenharmony_ciWill cause a converted file named ``example.py3`` to be written. 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci.. versionadded:: 3.2.3 1387db96d56Sopenharmony_ci The :option:`!--add-suffix` option was added. 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_ciTo translate an entire project from one directory tree to another use: 1417db96d56Sopenharmony_ci 1427db96d56Sopenharmony_ci.. code-block:: shell-session 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ci $ 2to3 --output-dir=python3-version/mycode -W -n python2-version/mycode 1457db96d56Sopenharmony_ci 1467db96d56Sopenharmony_ci 1477db96d56Sopenharmony_ci.. _2to3-fixers: 1487db96d56Sopenharmony_ci 1497db96d56Sopenharmony_ciFixers 1507db96d56Sopenharmony_ci------ 1517db96d56Sopenharmony_ci 1527db96d56Sopenharmony_ciEach step of transforming code is encapsulated in a fixer. The command ``2to3 1537db96d56Sopenharmony_ci-l`` lists them. As :ref:`documented above <2to3-using>`, each can be turned on 1547db96d56Sopenharmony_ciand off individually. They are described here in more detail. 1557db96d56Sopenharmony_ci 1567db96d56Sopenharmony_ci 1577db96d56Sopenharmony_ci.. 2to3fixer:: apply 1587db96d56Sopenharmony_ci 1597db96d56Sopenharmony_ci Removes usage of :func:`apply`. For example ``apply(function, *args, 1607db96d56Sopenharmony_ci **kwargs)`` is converted to ``function(*args, **kwargs)``. 1617db96d56Sopenharmony_ci 1627db96d56Sopenharmony_ci.. 2to3fixer:: asserts 1637db96d56Sopenharmony_ci 1647db96d56Sopenharmony_ci Replaces deprecated :mod:`unittest` method names with the correct ones. 1657db96d56Sopenharmony_ci 1667db96d56Sopenharmony_ci ================================ ========================================== 1677db96d56Sopenharmony_ci From To 1687db96d56Sopenharmony_ci ================================ ========================================== 1697db96d56Sopenharmony_ci ``failUnlessEqual(a, b)`` :meth:`assertEqual(a, b) 1707db96d56Sopenharmony_ci <unittest.TestCase.assertEqual>` 1717db96d56Sopenharmony_ci ``assertEquals(a, b)`` :meth:`assertEqual(a, b) 1727db96d56Sopenharmony_ci <unittest.TestCase.assertEqual>` 1737db96d56Sopenharmony_ci ``failIfEqual(a, b)`` :meth:`assertNotEqual(a, b) 1747db96d56Sopenharmony_ci <unittest.TestCase.assertNotEqual>` 1757db96d56Sopenharmony_ci ``assertNotEquals(a, b)`` :meth:`assertNotEqual(a, b) 1767db96d56Sopenharmony_ci <unittest.TestCase.assertNotEqual>` 1777db96d56Sopenharmony_ci ``failUnless(a)`` :meth:`assertTrue(a) 1787db96d56Sopenharmony_ci <unittest.TestCase.assertTrue>` 1797db96d56Sopenharmony_ci ``assert_(a)`` :meth:`assertTrue(a) 1807db96d56Sopenharmony_ci <unittest.TestCase.assertTrue>` 1817db96d56Sopenharmony_ci ``failIf(a)`` :meth:`assertFalse(a) 1827db96d56Sopenharmony_ci <unittest.TestCase.assertFalse>` 1837db96d56Sopenharmony_ci ``failUnlessRaises(exc, cal)`` :meth:`assertRaises(exc, cal) 1847db96d56Sopenharmony_ci <unittest.TestCase.assertRaises>` 1857db96d56Sopenharmony_ci ``failUnlessAlmostEqual(a, b)`` :meth:`assertAlmostEqual(a, b) 1867db96d56Sopenharmony_ci <unittest.TestCase.assertAlmostEqual>` 1877db96d56Sopenharmony_ci ``assertAlmostEquals(a, b)`` :meth:`assertAlmostEqual(a, b) 1887db96d56Sopenharmony_ci <unittest.TestCase.assertAlmostEqual>` 1897db96d56Sopenharmony_ci ``failIfAlmostEqual(a, b)`` :meth:`assertNotAlmostEqual(a, b) 1907db96d56Sopenharmony_ci <unittest.TestCase.assertNotAlmostEqual>` 1917db96d56Sopenharmony_ci ``assertNotAlmostEquals(a, b)`` :meth:`assertNotAlmostEqual(a, b) 1927db96d56Sopenharmony_ci <unittest.TestCase.assertNotAlmostEqual>` 1937db96d56Sopenharmony_ci ================================ ========================================== 1947db96d56Sopenharmony_ci 1957db96d56Sopenharmony_ci.. 2to3fixer:: basestring 1967db96d56Sopenharmony_ci 1977db96d56Sopenharmony_ci Converts :class:`basestring` to :class:`str`. 1987db96d56Sopenharmony_ci 1997db96d56Sopenharmony_ci.. 2to3fixer:: buffer 2007db96d56Sopenharmony_ci 2017db96d56Sopenharmony_ci Converts :class:`buffer` to :class:`memoryview`. This fixer is optional 2027db96d56Sopenharmony_ci because the :class:`memoryview` API is similar but not exactly the same as 2037db96d56Sopenharmony_ci that of :class:`buffer`. 2047db96d56Sopenharmony_ci 2057db96d56Sopenharmony_ci.. 2to3fixer:: dict 2067db96d56Sopenharmony_ci 2077db96d56Sopenharmony_ci Fixes dictionary iteration methods. :meth:`dict.iteritems` is converted to 2087db96d56Sopenharmony_ci :meth:`dict.items`, :meth:`dict.iterkeys` to :meth:`dict.keys`, and 2097db96d56Sopenharmony_ci :meth:`dict.itervalues` to :meth:`dict.values`. Similarly, 2107db96d56Sopenharmony_ci :meth:`dict.viewitems`, :meth:`dict.viewkeys` and :meth:`dict.viewvalues` are 2117db96d56Sopenharmony_ci converted respectively to :meth:`dict.items`, :meth:`dict.keys` and 2127db96d56Sopenharmony_ci :meth:`dict.values`. It also wraps existing usages of :meth:`dict.items`, 2137db96d56Sopenharmony_ci :meth:`dict.keys`, and :meth:`dict.values` in a call to :class:`list`. 2147db96d56Sopenharmony_ci 2157db96d56Sopenharmony_ci.. 2to3fixer:: except 2167db96d56Sopenharmony_ci 2177db96d56Sopenharmony_ci Converts ``except X, T`` to ``except X as T``. 2187db96d56Sopenharmony_ci 2197db96d56Sopenharmony_ci.. 2to3fixer:: exec 2207db96d56Sopenharmony_ci 2217db96d56Sopenharmony_ci Converts the ``exec`` statement to the :func:`exec` function. 2227db96d56Sopenharmony_ci 2237db96d56Sopenharmony_ci.. 2to3fixer:: execfile 2247db96d56Sopenharmony_ci 2257db96d56Sopenharmony_ci Removes usage of :func:`execfile`. The argument to :func:`execfile` is 2267db96d56Sopenharmony_ci wrapped in calls to :func:`open`, :func:`compile`, and :func:`exec`. 2277db96d56Sopenharmony_ci 2287db96d56Sopenharmony_ci.. 2to3fixer:: exitfunc 2297db96d56Sopenharmony_ci 2307db96d56Sopenharmony_ci Changes assignment of :attr:`sys.exitfunc` to use of the :mod:`atexit` 2317db96d56Sopenharmony_ci module. 2327db96d56Sopenharmony_ci 2337db96d56Sopenharmony_ci.. 2to3fixer:: filter 2347db96d56Sopenharmony_ci 2357db96d56Sopenharmony_ci Wraps :func:`filter` usage in a :class:`list` call. 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_ci.. 2to3fixer:: funcattrs 2387db96d56Sopenharmony_ci 2397db96d56Sopenharmony_ci Fixes function attributes that have been renamed. For example, 2407db96d56Sopenharmony_ci ``my_function.func_closure`` is converted to ``my_function.__closure__``. 2417db96d56Sopenharmony_ci 2427db96d56Sopenharmony_ci.. 2to3fixer:: future 2437db96d56Sopenharmony_ci 2447db96d56Sopenharmony_ci Removes ``from __future__ import new_feature`` statements. 2457db96d56Sopenharmony_ci 2467db96d56Sopenharmony_ci.. 2to3fixer:: getcwdu 2477db96d56Sopenharmony_ci 2487db96d56Sopenharmony_ci Renames :func:`os.getcwdu` to :func:`os.getcwd`. 2497db96d56Sopenharmony_ci 2507db96d56Sopenharmony_ci.. 2to3fixer:: has_key 2517db96d56Sopenharmony_ci 2527db96d56Sopenharmony_ci Changes ``dict.has_key(key)`` to ``key in dict``. 2537db96d56Sopenharmony_ci 2547db96d56Sopenharmony_ci.. 2to3fixer:: idioms 2557db96d56Sopenharmony_ci 2567db96d56Sopenharmony_ci This optional fixer performs several transformations that make Python code 2577db96d56Sopenharmony_ci more idiomatic. Type comparisons like ``type(x) is SomeClass`` and 2587db96d56Sopenharmony_ci ``type(x) == SomeClass`` are converted to ``isinstance(x, SomeClass)``. 2597db96d56Sopenharmony_ci ``while 1`` becomes ``while True``. This fixer also tries to make use of 2607db96d56Sopenharmony_ci :func:`sorted` in appropriate places. For example, this block :: 2617db96d56Sopenharmony_ci 2627db96d56Sopenharmony_ci L = list(some_iterable) 2637db96d56Sopenharmony_ci L.sort() 2647db96d56Sopenharmony_ci 2657db96d56Sopenharmony_ci is changed to :: 2667db96d56Sopenharmony_ci 2677db96d56Sopenharmony_ci L = sorted(some_iterable) 2687db96d56Sopenharmony_ci 2697db96d56Sopenharmony_ci.. 2to3fixer:: import 2707db96d56Sopenharmony_ci 2717db96d56Sopenharmony_ci Detects sibling imports and converts them to relative imports. 2727db96d56Sopenharmony_ci 2737db96d56Sopenharmony_ci.. 2to3fixer:: imports 2747db96d56Sopenharmony_ci 2757db96d56Sopenharmony_ci Handles module renames in the standard library. 2767db96d56Sopenharmony_ci 2777db96d56Sopenharmony_ci.. 2to3fixer:: imports2 2787db96d56Sopenharmony_ci 2797db96d56Sopenharmony_ci Handles other modules renames in the standard library. It is separate from 2807db96d56Sopenharmony_ci the :2to3fixer:`imports` fixer only because of technical limitations. 2817db96d56Sopenharmony_ci 2827db96d56Sopenharmony_ci.. 2to3fixer:: input 2837db96d56Sopenharmony_ci 2847db96d56Sopenharmony_ci Converts ``input(prompt)`` to ``eval(input(prompt))``. 2857db96d56Sopenharmony_ci 2867db96d56Sopenharmony_ci.. 2to3fixer:: intern 2877db96d56Sopenharmony_ci 2887db96d56Sopenharmony_ci Converts :func:`intern` to :func:`sys.intern`. 2897db96d56Sopenharmony_ci 2907db96d56Sopenharmony_ci.. 2to3fixer:: isinstance 2917db96d56Sopenharmony_ci 2927db96d56Sopenharmony_ci Fixes duplicate types in the second argument of :func:`isinstance`. For 2937db96d56Sopenharmony_ci example, ``isinstance(x, (int, int))`` is converted to ``isinstance(x, 2947db96d56Sopenharmony_ci int)`` and ``isinstance(x, (int, float, int))`` is converted to 2957db96d56Sopenharmony_ci ``isinstance(x, (int, float))``. 2967db96d56Sopenharmony_ci 2977db96d56Sopenharmony_ci.. 2to3fixer:: itertools_imports 2987db96d56Sopenharmony_ci 2997db96d56Sopenharmony_ci Removes imports of :func:`itertools.ifilter`, :func:`itertools.izip`, and 3007db96d56Sopenharmony_ci :func:`itertools.imap`. Imports of :func:`itertools.ifilterfalse` are also 3017db96d56Sopenharmony_ci changed to :func:`itertools.filterfalse`. 3027db96d56Sopenharmony_ci 3037db96d56Sopenharmony_ci.. 2to3fixer:: itertools 3047db96d56Sopenharmony_ci 3057db96d56Sopenharmony_ci Changes usage of :func:`itertools.ifilter`, :func:`itertools.izip`, and 3067db96d56Sopenharmony_ci :func:`itertools.imap` to their built-in equivalents. 3077db96d56Sopenharmony_ci :func:`itertools.ifilterfalse` is changed to :func:`itertools.filterfalse`. 3087db96d56Sopenharmony_ci 3097db96d56Sopenharmony_ci.. 2to3fixer:: long 3107db96d56Sopenharmony_ci 3117db96d56Sopenharmony_ci Renames :class:`long` to :class:`int`. 3127db96d56Sopenharmony_ci 3137db96d56Sopenharmony_ci.. 2to3fixer:: map 3147db96d56Sopenharmony_ci 3157db96d56Sopenharmony_ci Wraps :func:`map` in a :class:`list` call. It also changes ``map(None, x)`` 3167db96d56Sopenharmony_ci to ``list(x)``. Using ``from future_builtins import map`` disables this 3177db96d56Sopenharmony_ci fixer. 3187db96d56Sopenharmony_ci 3197db96d56Sopenharmony_ci.. 2to3fixer:: metaclass 3207db96d56Sopenharmony_ci 3217db96d56Sopenharmony_ci Converts the old metaclass syntax (``__metaclass__ = Meta`` in the class 3227db96d56Sopenharmony_ci body) to the new (``class X(metaclass=Meta)``). 3237db96d56Sopenharmony_ci 3247db96d56Sopenharmony_ci.. 2to3fixer:: methodattrs 3257db96d56Sopenharmony_ci 3267db96d56Sopenharmony_ci Fixes old method attribute names. For example, ``meth.im_func`` is converted 3277db96d56Sopenharmony_ci to ``meth.__func__``. 3287db96d56Sopenharmony_ci 3297db96d56Sopenharmony_ci.. 2to3fixer:: ne 3307db96d56Sopenharmony_ci 3317db96d56Sopenharmony_ci Converts the old not-equal syntax, ``<>``, to ``!=``. 3327db96d56Sopenharmony_ci 3337db96d56Sopenharmony_ci.. 2to3fixer:: next 3347db96d56Sopenharmony_ci 3357db96d56Sopenharmony_ci Converts the use of iterator's :meth:`~iterator.next` methods to the 3367db96d56Sopenharmony_ci :func:`next` function. It also renames :meth:`next` methods to 3377db96d56Sopenharmony_ci :meth:`~iterator.__next__`. 3387db96d56Sopenharmony_ci 3397db96d56Sopenharmony_ci.. 2to3fixer:: nonzero 3407db96d56Sopenharmony_ci 3417db96d56Sopenharmony_ci Renames definitions of methods called :meth:`__nonzero__` 3427db96d56Sopenharmony_ci to :meth:`~object.__bool__`. 3437db96d56Sopenharmony_ci 3447db96d56Sopenharmony_ci.. 2to3fixer:: numliterals 3457db96d56Sopenharmony_ci 3467db96d56Sopenharmony_ci Converts octal literals into the new syntax. 3477db96d56Sopenharmony_ci 3487db96d56Sopenharmony_ci.. 2to3fixer:: operator 3497db96d56Sopenharmony_ci 3507db96d56Sopenharmony_ci Converts calls to various functions in the :mod:`operator` module to other, 3517db96d56Sopenharmony_ci but equivalent, function calls. When needed, the appropriate ``import`` 3527db96d56Sopenharmony_ci statements are added, e.g. ``import collections.abc``. The following mapping 3537db96d56Sopenharmony_ci are made: 3547db96d56Sopenharmony_ci 3557db96d56Sopenharmony_ci ================================== ============================================= 3567db96d56Sopenharmony_ci From To 3577db96d56Sopenharmony_ci ================================== ============================================= 3587db96d56Sopenharmony_ci ``operator.isCallable(obj)`` ``callable(obj)`` 3597db96d56Sopenharmony_ci ``operator.sequenceIncludes(obj)`` ``operator.contains(obj)`` 3607db96d56Sopenharmony_ci ``operator.isSequenceType(obj)`` ``isinstance(obj, collections.abc.Sequence)`` 3617db96d56Sopenharmony_ci ``operator.isMappingType(obj)`` ``isinstance(obj, collections.abc.Mapping)`` 3627db96d56Sopenharmony_ci ``operator.isNumberType(obj)`` ``isinstance(obj, numbers.Number)`` 3637db96d56Sopenharmony_ci ``operator.repeat(obj, n)`` ``operator.mul(obj, n)`` 3647db96d56Sopenharmony_ci ``operator.irepeat(obj, n)`` ``operator.imul(obj, n)`` 3657db96d56Sopenharmony_ci ================================== ============================================= 3667db96d56Sopenharmony_ci 3677db96d56Sopenharmony_ci.. 2to3fixer:: paren 3687db96d56Sopenharmony_ci 3697db96d56Sopenharmony_ci Add extra parenthesis where they are required in list comprehensions. For 3707db96d56Sopenharmony_ci example, ``[x for x in 1, 2]`` becomes ``[x for x in (1, 2)]``. 3717db96d56Sopenharmony_ci 3727db96d56Sopenharmony_ci.. 2to3fixer:: print 3737db96d56Sopenharmony_ci 3747db96d56Sopenharmony_ci Converts the ``print`` statement to the :func:`print` function. 3757db96d56Sopenharmony_ci 3767db96d56Sopenharmony_ci.. 2to3fixer:: raise 3777db96d56Sopenharmony_ci 3787db96d56Sopenharmony_ci Converts ``raise E, V`` to ``raise E(V)``, and ``raise E, V, T`` to ``raise 3797db96d56Sopenharmony_ci E(V).with_traceback(T)``. If ``E`` is a tuple, the translation will be 3807db96d56Sopenharmony_ci incorrect because substituting tuples for exceptions has been removed in 3.0. 3817db96d56Sopenharmony_ci 3827db96d56Sopenharmony_ci.. 2to3fixer:: raw_input 3837db96d56Sopenharmony_ci 3847db96d56Sopenharmony_ci Converts :func:`raw_input` to :func:`input`. 3857db96d56Sopenharmony_ci 3867db96d56Sopenharmony_ci.. 2to3fixer:: reduce 3877db96d56Sopenharmony_ci 3887db96d56Sopenharmony_ci Handles the move of :func:`reduce` to :func:`functools.reduce`. 3897db96d56Sopenharmony_ci 3907db96d56Sopenharmony_ci.. 2to3fixer:: reload 3917db96d56Sopenharmony_ci 3927db96d56Sopenharmony_ci Converts :func:`reload` to :func:`importlib.reload`. 3937db96d56Sopenharmony_ci 3947db96d56Sopenharmony_ci.. 2to3fixer:: renames 3957db96d56Sopenharmony_ci 3967db96d56Sopenharmony_ci Changes :data:`sys.maxint` to :data:`sys.maxsize`. 3977db96d56Sopenharmony_ci 3987db96d56Sopenharmony_ci.. 2to3fixer:: repr 3997db96d56Sopenharmony_ci 4007db96d56Sopenharmony_ci Replaces backtick repr with the :func:`repr` function. 4017db96d56Sopenharmony_ci 4027db96d56Sopenharmony_ci.. 2to3fixer:: set_literal 4037db96d56Sopenharmony_ci 4047db96d56Sopenharmony_ci Replaces use of the :class:`set` constructor with set literals. This fixer 4057db96d56Sopenharmony_ci is optional. 4067db96d56Sopenharmony_ci 4077db96d56Sopenharmony_ci.. 2to3fixer:: standarderror 4087db96d56Sopenharmony_ci 4097db96d56Sopenharmony_ci Renames :exc:`StandardError` to :exc:`Exception`. 4107db96d56Sopenharmony_ci 4117db96d56Sopenharmony_ci.. 2to3fixer:: sys_exc 4127db96d56Sopenharmony_ci 4137db96d56Sopenharmony_ci Changes the deprecated :data:`sys.exc_value`, :data:`sys.exc_type`, 4147db96d56Sopenharmony_ci :data:`sys.exc_traceback` to use :func:`sys.exc_info`. 4157db96d56Sopenharmony_ci 4167db96d56Sopenharmony_ci.. 2to3fixer:: throw 4177db96d56Sopenharmony_ci 4187db96d56Sopenharmony_ci Fixes the API change in generator's :meth:`throw` method. 4197db96d56Sopenharmony_ci 4207db96d56Sopenharmony_ci.. 2to3fixer:: tuple_params 4217db96d56Sopenharmony_ci 4227db96d56Sopenharmony_ci Removes implicit tuple parameter unpacking. This fixer inserts temporary 4237db96d56Sopenharmony_ci variables. 4247db96d56Sopenharmony_ci 4257db96d56Sopenharmony_ci.. 2to3fixer:: types 4267db96d56Sopenharmony_ci 4277db96d56Sopenharmony_ci Fixes code broken from the removal of some members in the :mod:`types` 4287db96d56Sopenharmony_ci module. 4297db96d56Sopenharmony_ci 4307db96d56Sopenharmony_ci.. 2to3fixer:: unicode 4317db96d56Sopenharmony_ci 4327db96d56Sopenharmony_ci Renames :class:`unicode` to :class:`str`. 4337db96d56Sopenharmony_ci 4347db96d56Sopenharmony_ci.. 2to3fixer:: urllib 4357db96d56Sopenharmony_ci 4367db96d56Sopenharmony_ci Handles the rename of :mod:`urllib` and :mod:`urllib2` to the :mod:`urllib` 4377db96d56Sopenharmony_ci package. 4387db96d56Sopenharmony_ci 4397db96d56Sopenharmony_ci.. 2to3fixer:: ws_comma 4407db96d56Sopenharmony_ci 4417db96d56Sopenharmony_ci Removes excess whitespace from comma separated items. This fixer is 4427db96d56Sopenharmony_ci optional. 4437db96d56Sopenharmony_ci 4447db96d56Sopenharmony_ci.. 2to3fixer:: xrange 4457db96d56Sopenharmony_ci 4467db96d56Sopenharmony_ci Renames :func:`xrange` to :func:`range` and wraps existing :func:`range` 4477db96d56Sopenharmony_ci calls with :class:`list`. 4487db96d56Sopenharmony_ci 4497db96d56Sopenharmony_ci.. 2to3fixer:: xreadlines 4507db96d56Sopenharmony_ci 4517db96d56Sopenharmony_ci Changes ``for x in file.xreadlines()`` to ``for x in file``. 4527db96d56Sopenharmony_ci 4537db96d56Sopenharmony_ci.. 2to3fixer:: zip 4547db96d56Sopenharmony_ci 4557db96d56Sopenharmony_ci Wraps :func:`zip` usage in a :class:`list` call. This is disabled when 4567db96d56Sopenharmony_ci ``from future_builtins import zip`` appears. 4577db96d56Sopenharmony_ci 4587db96d56Sopenharmony_ci 4597db96d56Sopenharmony_ci:mod:`lib2to3` --- 2to3's library 4607db96d56Sopenharmony_ci--------------------------------- 4617db96d56Sopenharmony_ci 4627db96d56Sopenharmony_ci.. module:: lib2to3 4637db96d56Sopenharmony_ci :synopsis: The 2to3 library 4647db96d56Sopenharmony_ci 4657db96d56Sopenharmony_ci.. moduleauthor:: Guido van Rossum 4667db96d56Sopenharmony_ci.. moduleauthor:: Collin Winter 4677db96d56Sopenharmony_ci.. moduleauthor:: Benjamin Peterson <benjamin@python.org> 4687db96d56Sopenharmony_ci 4697db96d56Sopenharmony_ci**Source code:** :source:`Lib/lib2to3/` 4707db96d56Sopenharmony_ci 4717db96d56Sopenharmony_ci-------------- 4727db96d56Sopenharmony_ci 4737db96d56Sopenharmony_ci.. deprecated-removed:: 3.11 3.13 4747db96d56Sopenharmony_ci Python 3.9 switched to a PEG parser (see :pep:`617`) while lib2to3 is 4757db96d56Sopenharmony_ci using a less flexible LL(1) parser. Python 3.10 includes new language 4767db96d56Sopenharmony_ci syntax that is not parsable by lib2to3's LL(1) parser (see :pep:`634`). 4777db96d56Sopenharmony_ci The ``lib2to3`` module was marked pending for deprecation in Python 3.9 4787db96d56Sopenharmony_ci (raising :exc:`PendingDeprecationWarning` on import) and fully deprecated 4797db96d56Sopenharmony_ci in Python 3.11 (raising :exc:`DeprecationWarning`). 4807db96d56Sopenharmony_ci It will be removed from the standard library in Python 3.13. 4817db96d56Sopenharmony_ci Consider third-party alternatives such as `LibCST`_ or `parso`_. 4827db96d56Sopenharmony_ci 4837db96d56Sopenharmony_ci.. note:: 4847db96d56Sopenharmony_ci 4857db96d56Sopenharmony_ci The :mod:`lib2to3` API should be considered unstable and may change 4867db96d56Sopenharmony_ci drastically in the future. 4877db96d56Sopenharmony_ci 4887db96d56Sopenharmony_ci.. _LibCST: https://libcst.readthedocs.io/ 4897db96d56Sopenharmony_ci.. _parso: https://parso.readthedocs.io/ 490