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