2019-04-21 11:50:48 +08:00

21 lines
54 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="body" role="main"><div class="section" id="to3-automated-python-2-to-3-code-translation"><h1><span class="yiyi-st" id="yiyi-10">26.7. </span><span class="yiyi-st" id="yiyi-11">2to3 - 自动Python 2到3代码翻译</span></h1><p><span class="yiyi-st" id="yiyi-12">2to3是一个Python程序它读取Python 2.x源代码并应用一系列<em>修复器</em>将其转换为有效的Python 3.x代码。</span><span class="yiyi-st" id="yiyi-13">标准库包含一组丰富的修复程序,它们将处理几乎所有的代码。</span><span class="yiyi-st" id="yiyi-14">2to3支持库<a class="reference internal" href="#module-lib2to3" title="lib2to3: the 2to3 library"><code class="xref py py-mod docutils literal"><span class="pre">lib2to3</span></code></a>是一个灵活的和通用的库所以可以编写自己的修复软件2to3。</span><span class="yiyi-st" id="yiyi-15"><a class="reference internal" href="#module-lib2to3" title="lib2to3: the 2to3 library"><code class="xref py py-mod docutils literal"><span class="pre">lib2to3</span></code></a>也可以适用于需要自动编辑Python代码的自定义应用程序。</span></p><div class="section" id="using-2to3"><h2><span class="yiyi-st" id="yiyi-16">26.7.1. </span><span class="yiyi-st" id="yiyi-17">使用2to3 </span></h2><p><span class="yiyi-st" id="yiyi-18">2to3通常会安装Python解释器作为脚本。</span><span class="yiyi-st" id="yiyi-19">它也位于Python根目录的<code class="file docutils literal"><span class="pre">Tools/scripts</span></code>目录中。</span></p><p><span class="yiyi-st" id="yiyi-20">2to3的基本参数是要转换的文件或目录的列表。</span><span class="yiyi-st" id="yiyi-21">递归遍历Python目录的目录。</span></p><p><span class="yiyi-st" id="yiyi-22">下面是一个示例Python 2.x源文件<code class="file docutils literal"><span class="pre">example.py</span></code></span></p><pre><code class="language-python"><span></span><span class="k">def</span> <span class="nf">greet</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
<span class="nb">print</span> <span class="s2">"Hello, </span><span class="si">{0}</span><span class="s2">!"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="nb">print</span> <span class="s2">"What's your name?"</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">raw_input</span><span class="p">()</span>
<span class="n">greet</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
</code></pre><p><span class="yiyi-st" id="yiyi-23">它可以通过命令行中的2to3转换为Python 3.x代码</span></p><div class="highlight-shell-session"><div class="highlight"><pre><span></span><span class="gp">$</span> 2to3 example.py
</pre></div></div><p><span class="yiyi-st" id="yiyi-24">将打印与原始源文件的差异。</span><span class="yiyi-st" id="yiyi-25">2to3也可以将需要的修改写回源文件。</span><span class="yiyi-st" id="yiyi-26">(除非提供<code class="xref std std-option docutils literal"><span class="pre">-n</span></code>,否则将对原始文件进行备份。)</span><span class="yiyi-st" id="yiyi-27">使用<code class="xref std std-option docutils literal"><span class="pre">-w</span></code>标志启用写回更改:</span></p><div class="highlight-shell-session"><div class="highlight"><pre><span></span><span class="gp">$</span> 2to3 -w example.py
</pre></div></div><p><span class="yiyi-st" id="yiyi-28">转换后,<code class="file docutils literal"><span class="pre">example.py</span></code>如下所示:</span></p><pre><code class="language-python"><span></span><span class="k">def</span> <span class="nf">greet</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"Hello, </span><span class="si">{0}</span><span class="s2">!"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"What's your name?"</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="n">greet</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
</code></pre><p><span class="yiyi-st" id="yiyi-29">在整个翻译过程中保留评论和精确缩进。</span></p><p><span class="yiyi-st" id="yiyi-30">默认情况下2to3运行一组<a class="reference internal" href="#to3-fixers"><span>predefined fixers</span></a></span><span class="yiyi-st" id="yiyi-31"><code class="xref std std-option docutils literal"><span class="pre">-l</span></code></span><span class="yiyi-st" id="yiyi-32">可以使用<code class="xref std std-option docutils literal"><span class="pre">-f</span></code>给出要运行的一组明确的修复程序。同样,<code class="xref std std-option docutils literal"><span class="pre">-x</span></code>显式禁用修复程序。</span><span class="yiyi-st" id="yiyi-33">以下示例仅运行<code class="docutils literal"><span class="pre">imports</span></code><code class="docutils literal"><span class="pre">has_key</span></code>修复程序:</span></p><div class="highlight-shell-session"><div class="highlight"><pre><span></span><span class="gp">$</span> 2to3 -f imports -f has_key example.py
</pre></div></div><p><span class="yiyi-st" id="yiyi-34">此命令运行除了<code class="docutils literal"><span class="pre">apply</span></code>修订器之外的每个修订器:</span></p><div class="highlight-shell-session"><div class="highlight"><pre><span></span><span class="gp">$</span> 2to3 -x apply example.py
</pre></div></div><p><span class="yiyi-st" id="yiyi-35">一些修复程序是<em>显式</em>,意味着它们不是默认运行的,并且必须在命令行上列出以运行。</span><span class="yiyi-st" id="yiyi-36">这里,除了默认修复程序,<code class="docutils literal"><span class="pre">idioms</span></code>修复程序运行:</span></p><div class="highlight-shell-session"><div class="highlight"><pre><span></span><span class="gp">$</span> 2to3 -f all -f idioms example.py
</pre></div></div><p><span class="yiyi-st" id="yiyi-37">请注意如何通过<code class="docutils literal"><span class="pre">all</span></code>启用所有默认修正程序。</span></p><p><span class="yiyi-st" id="yiyi-38">有时2to3会在你的源代码中找到一个需要改变的地方但2to3不能自动修复。</span><span class="yiyi-st" id="yiyi-39">在这种情况下2to3将在文件的diff下面打印一个警告。</span><span class="yiyi-st" id="yiyi-40">您应该解决警告以具有兼容的3.x代码。</span></p><p><span class="yiyi-st" id="yiyi-41">2to3也可以重构doctests。</span><span class="yiyi-st" id="yiyi-42">要启用此模式,请使用<code class="xref std std-option docutils literal"><span class="pre">-d</span></code>标志。</span><span class="yiyi-st" id="yiyi-43">请注意,<em>只有</em> doctests将被重构。</span><span class="yiyi-st" id="yiyi-44">这也不需要模块是有效的Python。</span><span class="yiyi-st" id="yiyi-45">例如doctest like reST文档中的示例也可以使用此选项重构。</span></p><p><span class="yiyi-st" id="yiyi-46"><code class="xref std std-option docutils literal"><span class="pre">-v</span></code>选项允许输出有关翻译过程的更多信息。</span></p><p><span class="yiyi-st" id="yiyi-47">由于一些打印语句可以解析为函数调用或语句因此2to3不能总是读取包含打印函数的文件。</span><span class="yiyi-st" id="yiyi-48">当2to3检测到<code class="docutils literal"><span class="pre">来自 t&gt; <span class="pre">__未来__</span> <span class="pre">导入</span> <span class="pre">print_function</span></span></code>编译器指令时,修改其内部语法以将<a class="reference internal" href="functions.html#print" title="print"><code class="xref py py-func docutils literal"><span class="pre">print()</span></code></a>解释为函数。</span><span class="yiyi-st" id="yiyi-49">此更改也可以使用<code class="xref std std-option docutils literal"><span class="pre">-p</span></code>标志手动启用。</span><span class="yiyi-st" id="yiyi-50">使用<code class="xref std std-option docutils literal"><span class="pre">-p</span></code>在已经转换其打印语句的代码上运行修复程序。</span></p><p><span class="yiyi-st" id="yiyi-51"><code class="xref std std-option docutils literal"><span class="pre">-o</span></code><code class="xref std std-option docutils literal"><span class="pre">--output-dir</span></code>选项允许指定要处理的输出文件的备用目录。</span><span class="yiyi-st" id="yiyi-52">当使用此作为备份文件时,如果不覆盖输入文件,则不需要使用<code class="xref std std-option docutils literal"><span class="pre">-n</span></code>标志。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-53"><span class="versionmodified">版本3.2.3中的新功能:</span>添加了<code class="xref std std-option docutils literal"><span class="pre">-o</span></code>选项。</span></p></div><p><span class="yiyi-st" id="yiyi-54"><code class="xref std std-option docutils literal"><span class="pre">-W</span></code><code class="xref std std-option docutils literal"><span class="pre">--write-unchanged-files</span></code>标志告诉2to3始终写入输出文件即使文件不需要更改。</span><span class="yiyi-st" id="yiyi-55">这对于<code class="xref std std-option docutils literal"><span class="pre">-o</span></code>最有用因此整个Python源代码树将从一个目录转换为另一个目录。</span><span class="yiyi-st" id="yiyi-56">此选项意味着<code class="xref std std-option docutils literal"><span class="pre">-w</span></code>标志,因为它不会有意义。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-57"><span class="versionmodified">版本3.2.3中的新功能:</span>添加了<code class="xref std std-option docutils literal"><span class="pre">-W</span></code>标志。</span></p></div><p><span class="yiyi-st" id="yiyi-58"><code class="xref std std-option docutils literal"><span class="pre">--add-suffix</span></code>选项指定要附加到所有输出文件名的字符串。</span><span class="yiyi-st" id="yiyi-59">指定此选项时需要<code class="xref std std-option docutils literal"><span class="pre">-n</span></code>标志,因为写入不同的文件名时不需要备份。</span><span class="yiyi-st" id="yiyi-60">例:</span></p><div class="highlight-shell-session"><div class="highlight"><pre><span></span><span class="gp">$</span> 2to3 -n -W --add-suffix<span class="o">=</span><span class="m">3</span> example.py
</pre></div></div><p><span class="yiyi-st" id="yiyi-61">将导致写入名为<code class="docutils literal"><span class="pre">example.py3</span></code>的转换文件。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-62"><span class="versionmodified">版本3.2.3中的新功能:</span>添加了<code class="xref std std-option docutils literal"><span class="pre">--add-suffix</span></code>选项。</span></p></div><p><span class="yiyi-st" id="yiyi-63">要将整个项目从一个目录树翻译到另一个目录树,请使用:</span></p><div class="highlight-shell-session"><div class="highlight"><pre><span></span><span class="gp">$</span> 2to3 --output-dir<span class="o">=</span>python3-version/mycode -W -n python2-version/mycode
</pre></div></div></div><div class="section" id="fixers"><h2><span class="yiyi-st" id="yiyi-64">26.7.2. </span><span class="yiyi-st" id="yiyi-65">Fixers</span></h2><p><span class="yiyi-st" id="yiyi-66">转换代码的每个步骤都封装在修复程序中。</span><span class="yiyi-st" id="yiyi-67">命令<code class="docutils literal"><span class="pre">2to3</span> <span class="pre">-l </span></code>列出它们。</span><span class="yiyi-st" id="yiyi-68">由于<a class="reference internal" href="#to3-using"><span>documented above</span></a>,每个可以单独打开和关闭。</span><span class="yiyi-st" id="yiyi-69">这里更详细地描述它们。</span></p><dl class="2to3fixer"><dt id="2to3fixer-apply"><span class="yiyi-st" id="yiyi-70"> <code class="descname">apply</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-71">删除<code class="xref py py-func docutils literal"><span class="pre">apply()</span></code>的使用。</span><span class="yiyi-st" id="yiyi-72">例如<code class="docutils literal"><span class="pre">applyfunction</span> <span class="pre">* args</span> <span class="pre">** kwargs</span></code>转换为<code class="docutils literal"><span class="pre">函数(* args</span> <span class="pre">** kwargs</span></code></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-asserts"><span class="yiyi-st" id="yiyi-73"> <code class="descname">asserts</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-74">用正确的方法替换已弃用的<a class="reference internal" href="unittest.html#module-unittest" title="unittest: Unit testing framework for Python."><code class="xref py py-mod docutils literal"><span class="pre">unittest</span></code></a>方法名称。</span></p><table border="1" class="docutils"><thead valign="bottom"><tr class="row-odd"><th class="head"><span class="yiyi-st" id="yiyi-75"></span></th><th class="head"><span class="yiyi-st" id="yiyi-76"></span></th></tr></thead><tbody valign="top"><tr class="row-even"><td><span class="yiyi-st" id="yiyi-77"><code class="docutils literal"><span class="pre">failUnlessEquala</span> <span class="pre">b</span></code></span></td><td><span class="yiyi-st" id="yiyi-78"><a class="reference internal" href="unittest.html#unittest.TestCase.assertEqual" title="unittest.TestCase.assertEqual"><code class="xref py py-meth docutils literal"><span class="pre">assertEqual(a,</span> <span class="pre">b)</span></code></a></span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-79"><code class="docutils literal"><span class="pre">assertEqualsa</span> <span class="pre">b</span></code></span></td><td><span class="yiyi-st" id="yiyi-80"><a class="reference internal" href="unittest.html#unittest.TestCase.assertEqual" title="unittest.TestCase.assertEqual"><code class="xref py py-meth docutils literal"><span class="pre">assertEqual(a,</span> <span class="pre">b)</span></code></a></span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-81"><code class="docutils literal"><span class="pre">failIfEquala</span> <span class="pre">b</span></code></span></td><td><span class="yiyi-st" id="yiyi-82"><a class="reference internal" href="unittest.html#unittest.TestCase.assertNotEqual" title="unittest.TestCase.assertNotEqual"><code class="xref py py-meth docutils literal"><span class="pre">assertNotEqual(a,</span> <span class="pre">b)</span></code></a></span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-83"><code class="docutils literal"><span class="pre">assertNotEqualsa</span> <span class="pre">b</span></code></span></td><td><span class="yiyi-st" id="yiyi-84"><a class="reference internal" href="unittest.html#unittest.TestCase.assertNotEqual" title="unittest.TestCase.assertNotEqual"><code class="xref py py-meth docutils literal"><span class="pre">assertNotEqual(a,</span> <span class="pre">b)</span></code></a></span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-85"><code class="docutils literal"><span class="pre">failUnless(a)</span></code></span></td><td><span class="yiyi-st" id="yiyi-86"><a class="reference internal" href="unittest.html#unittest.TestCase.assertTrue" title="unittest.TestCase.assertTrue"><code class="xref py py-meth docutils literal"><span class="pre">assertTrue(a)</span></code></a></span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-87"><code class="docutils literal"><span class="pre">assert_(a)</span></code></span></td><td><span class="yiyi-st" id="yiyi-88"><a class="reference internal" href="unittest.html#unittest.TestCase.assertTrue" title="unittest.TestCase.assertTrue"><code class="xref py py-meth docutils literal"><span class="pre">assertTrue(a)</span></code></a></span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-89"><code class="docutils literal"><span class="pre">failIf(a)</span></code></span></td><td><span class="yiyi-st" id="yiyi-90"><a class="reference internal" href="unittest.html#unittest.TestCase.assertFalse" title="unittest.TestCase.assertFalse"><code class="xref py py-meth docutils literal"><span class="pre">assertFalse(a)</span></code></a></span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-91"><code class="docutils literal"><span class="pre">failUnlessRaisesexc</span> <span class="pre">cal</span></code></span></td><td><span class="yiyi-st" id="yiyi-92"><a class="reference internal" href="unittest.html#unittest.TestCase.assertRaises" title="unittest.TestCase.assertRaises"><code class="xref py py-meth docutils literal"><span class="pre">assertRaises(exc,</span> <span class="pre">cal)</span></code></a></span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-93"><code class="docutils literal"><span class="pre">failUnlessAlmostEquala</span> <span class="pre">b</span></code></span></td><td><span class="yiyi-st" id="yiyi-94"><a class="reference internal" href="unittest.html#unittest.TestCase.assertAlmostEqual" title="unittest.TestCase.assertAlmostEqual"><code class="xref py py-meth docutils literal"><span class="pre">assertAlmostEqual(a,</span> <span class="pre">b)</span></code></a></span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-95"><code class="docutils literal"><span class="pre">assertAlmostEqualsa</span> <span class="pre">b</span></code></span></td><td><span class="yiyi-st" id="yiyi-96"><a class="reference internal" href="unittest.html#unittest.TestCase.assertAlmostEqual" title="unittest.TestCase.assertAlmostEqual"><code class="xref py py-meth docutils literal"><span class="pre">assertAlmostEqual(a,</span> <span class="pre">b)</span></code></a></span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-97"><code class="docutils literal"><span class="pre">failIfAlmostEquala</span> <span class="pre">b</span></code></span></td><td><span class="yiyi-st" id="yiyi-98"><a class="reference internal" href="unittest.html#unittest.TestCase.assertNotAlmostEqual" title="unittest.TestCase.assertNotAlmostEqual"><code class="xref py py-meth docutils literal"><span class="pre">assertNotAlmostEqual(a,</span> <span class="pre">b)</span></code></a></span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-99"><code class="docutils literal"><span class="pre">assertNotAlmostEqualsa</span> <span class="pre">b</span></code></span></td><td><span class="yiyi-st" id="yiyi-100"><a class="reference internal" href="unittest.html#unittest.TestCase.assertNotAlmostEqual" title="unittest.TestCase.assertNotAlmostEqual"><code class="xref py py-meth docutils literal"><span class="pre">assertNotAlmostEqual(a,</span> <span class="pre">b)</span></code></a></span></td></tr></tbody></table></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-basestring"><span class="yiyi-st" id="yiyi-101"> <code class="descname">basestring</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-102"><code class="xref py py-class docutils literal"><span class="pre">basestring</span></code>转换为<a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-buffer"><span class="yiyi-st" id="yiyi-103"> <code class="descname">buffer</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-104"><code class="xref py py-class docutils literal"><span class="pre">buffer</span></code>转换为<a class="reference internal" href="stdtypes.html#memoryview" title="memoryview"><code class="xref py py-class docutils literal"><span class="pre">memoryview</span></code></a></span><span class="yiyi-st" id="yiyi-105">此修订器是可选的,因为<a class="reference internal" href="stdtypes.html#memoryview" title="memoryview"><code class="xref py py-class docutils literal"><span class="pre">memoryview</span></code></a> API与<code class="xref py py-class docutils literal"><span class="pre">buffer</span></code>类似,但不完全相同。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-callable"><span class="yiyi-st" id="yiyi-106"> <code class="descname">callable</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-107"><code class="docutils literal"><span class="pre">callable(x)</span></code>转换为<code class="docutils literal"><span class="pre">isinstancex</span> <span class="pre">collections.Callable</span></code>,向<a class="reference internal" href="collections.html#module-collections" title="collections: Container datatypes"><code class="xref py py-mod docutils literal"><span class="pre">collections</span></code></a>,如果需要的话。</span><span class="yiyi-st" id="yiyi-108">注意<code class="docutils literal"><span class="pre">callable(x)</span></code>在Python 3.2中返回所以如果你不打算支持Python 3.1,你可以禁用这个修复软件。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-dict"><span class="yiyi-st" id="yiyi-109"> <code class="descname">dict</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-110">修复字典迭代方法。</span><span class="yiyi-st" id="yiyi-111"><code class="xref py py-meth docutils literal"><span class="pre">dict.iteritems()</span></code> is converted to <a class="reference internal" href="stdtypes.html#dict.items" title="dict.items"><code class="xref py py-meth docutils literal"><span class="pre">dict.items()</span></code></a>, <code class="xref py py-meth docutils literal"><span class="pre">dict.iterkeys()</span></code> to <a class="reference internal" href="stdtypes.html#dict.keys" title="dict.keys"><code class="xref py py-meth docutils literal"><span class="pre">dict.keys()</span></code></a>, and <code class="xref py py-meth docutils literal"><span class="pre">dict.itervalues()</span></code> to <a class="reference internal" href="stdtypes.html#dict.values" title="dict.values"><code class="xref py py-meth docutils literal"><span class="pre">dict.values()</span></code></a>. </span><span class="yiyi-st" id="yiyi-112">同样,<code class="xref py py-meth docutils literal"><span class="pre">dict.viewitems()</span></code><code class="xref py py-meth docutils literal"><span class="pre">dict.viewkeys()</span></code><code class="xref py py-meth docutils literal"><span class="pre">dict.viewvalues()</span></code>分别转换为<a class="reference internal" href="stdtypes.html#dict.items" title="dict.items"><code class="xref py py-meth docutils literal"><span class="pre">dict.items()</span></code></a><a class="reference internal" href="stdtypes.html#dict.keys" title="dict.keys"><code class="xref py py-meth docutils literal"><span class="pre">dict.keys()</span></code></a><a class="reference internal" href="stdtypes.html#dict.values" title="dict.values"><code class="xref py py-meth docutils literal"><span class="pre">dict.values()</span></code></a></span><span class="yiyi-st" id="yiyi-113">It also wraps existing usages of <a class="reference internal" href="stdtypes.html#dict.items" title="dict.items"><code class="xref py py-meth docutils literal"><span class="pre">dict.items()</span></code></a>, <a class="reference internal" href="stdtypes.html#dict.keys" title="dict.keys"><code class="xref py py-meth docutils literal"><span class="pre">dict.keys()</span></code></a>, and <a class="reference internal" href="stdtypes.html#dict.values" title="dict.values"><code class="xref py py-meth docutils literal"><span class="pre">dict.values()</span></code></a> in a call to <a class="reference internal" href="stdtypes.html#list" title="list"><code class="xref py py-class docutils literal"><span class="pre">list</span></code></a>.</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-except"><span class="yiyi-st" id="yiyi-114"> <code class="descname">except</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-115">Converts <code class="docutils literal"><span class="pre">except</span> <span class="pre">X,</span> <span class="pre">T</span></code> to <code class="docutils literal"><span class="pre">except</span> <span class="pre">X</span> <span class="pre">as</span> <span class="pre">T</span></code>.</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-exec"><span class="yiyi-st" id="yiyi-116"> <code class="descname">exec</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-117"><code class="docutils literal"><span class="pre">exec</span></code>语句转换为<a class="reference internal" href="functions.html#exec" title="exec"><code class="xref py py-func docutils literal"><span class="pre">exec()</span></code></a>函数。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-execfile"><span class="yiyi-st" id="yiyi-118"> <code class="descname">execfile</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-119">删除<code class="xref py py-func docutils literal"><span class="pre">execfile()</span></code>的使用。</span><span class="yiyi-st" id="yiyi-120"><code class="xref py py-func docutils literal"><span class="pre">execfile()</span></code>的参数包含在<a class="reference internal" href="functions.html#open" title="open"><code class="xref py py-func docutils literal"><span class="pre">open()</span></code></a><a class="reference internal" href="functions.html#compile" title="compile"><code class="xref py py-func docutils literal"><span class="pre">compile()</span></code></a><a class="reference internal" href="functions.html#exec" title="exec"><code class="xref py py-func docutils literal"><span class="pre">exec()</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-exitfunc"><span class="yiyi-st" id="yiyi-121"> <code class="descname">exitfunc</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-122">更改<code class="xref py py-attr docutils literal"><span class="pre">sys.exitfunc</span></code>的分配以使用<a class="reference internal" href="atexit.html#module-atexit" title="atexit: Register and execute cleanup functions."><code class="xref py py-mod docutils literal"><span class="pre">atexit</span></code></a>模块。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-filter"><span class="yiyi-st" id="yiyi-123"> <code class="descname">filter</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-124"><a class="reference internal" href="stdtypes.html#list" title="list"><code class="xref py py-class docutils literal"><span class="pre">list</span></code></a>调用中使用<a class="reference internal" href="functions.html#filter" title="filter"><code class="xref py py-func docutils literal"><span class="pre">filter()</span></code></a>使用。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-funcattrs"><span class="yiyi-st" id="yiyi-125"> <code class="descname">funcattrs</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-126">修复已重命名的函数属性。</span><span class="yiyi-st" id="yiyi-127">例如,<code class="docutils literal"><span class="pre">my_function.func_closure</span></code>将转换为<code class="docutils literal"><span class="pre">my_function.__closure__</span></code></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-future"><span class="yiyi-st" id="yiyi-128"> <code class="descname">future</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-129"><span class="pre">__未来__</span> <span class="pre">导入</span> <span class="pre">new_feature</span>语句中删除<code class="docutils literal"><span class="pre"></span></code></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-getcwdu"><span class="yiyi-st" id="yiyi-130"> <code class="descname">getcwdu</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-131"><code class="xref py py-func docutils literal"><span class="pre">os.getcwdu()</span></code>重命名为<a class="reference internal" href="os.html#os.getcwd" title="os.getcwd"><code class="xref py py-func docutils literal"><span class="pre">os.getcwd()</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-has_key"><span class="yiyi-st" id="yiyi-132"> <code class="descname">has_key</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-133"><span class="pre">dict</span>中将<code class="docutils literal"><span class="pre">dict.has_key(key)</span></code>更改为<code class="docutils literal"><span class="pre"></span> <span class="pre"></span></code></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-idioms"><span class="yiyi-st" id="yiyi-134"> <code class="descname">idioms</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-135">这个可选的修复程序执行几个转换使Python代码更惯用。</span><span class="yiyi-st" id="yiyi-136">Type comparisons like <code class="docutils literal"><span class="pre">type(x)</span> <span class="pre">is</span> <span class="pre">SomeClass</span></code> and <code class="docutils literal"><span class="pre">type(x)</span> <span class="pre">==</span> <span class="pre">SomeClass</span></code> are converted to <code class="docutils literal"><span class="pre">isinstance(x,</span> <span class="pre">SomeClass)</span></code>. </span><span class="yiyi-st" id="yiyi-137"><code class="docutils literal"><span class="pre">,而</span> <span class="pre">1</span></code>成为<code class="docutils literal"><span class="pre">,而</span> <span class="pre"></span></code></span><span class="yiyi-st" id="yiyi-138">此修复程序还尝试在适当的地方使用<a class="reference internal" href="functions.html#sorted" title="sorted"><code class="xref py py-func docutils literal"><span class="pre">sorted()</span></code></a></span><span class="yiyi-st" id="yiyi-139">例如,这个块</span></p><pre><code class="language-python"><span></span><span class="n">L</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">some_iterable</span><span class="p">)</span>
<span class="n">L</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
</code></pre><p><span class="yiyi-st" id="yiyi-140">改为</span></p><pre><code class="language-python"><span></span><span class="n">L</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">some_iterable</span><span class="p">)</span>
</code></pre></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-import"><span class="yiyi-st" id="yiyi-141"> <code class="descname">import</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-142">检测兄弟导入,并将其转换为相对导入。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-imports"><span class="yiyi-st" id="yiyi-143"> <code class="descname">imports</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-144">处理标准库中的模块重命名。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-imports2"><span class="yiyi-st" id="yiyi-145"> <code class="descname">imports2</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-146">处理标准库中的其他模块重命名。</span><span class="yiyi-st" id="yiyi-147">它仅与<a class="reference internal" href="#2to3fixer-imports"><code class="xref std std-2to3fixer docutils literal"><span class="pre">imports</span></code></a>固定程序分开,因为存在技术限制。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-input"><span class="yiyi-st" id="yiyi-148"> <code class="descname">input</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-149"><code class="docutils literal"><span class="pre">input(prompt)</span></code>转换为<code class="docutils literal"><span class="pre">eval(input(prompt))</span></code></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-intern"><span class="yiyi-st" id="yiyi-150"> <code class="descname">intern</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-151"><code class="xref py py-func docutils literal"><span class="pre">intern()</span></code>转换为<a class="reference internal" href="sys.html#sys.intern" title="sys.intern"><code class="xref py py-func docutils literal"><span class="pre">sys.intern()</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-isinstance"><span class="yiyi-st" id="yiyi-152"> <code class="descname">isinstance</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-153">修复<a class="reference internal" href="functions.html#isinstance" title="isinstance"><code class="xref py py-func docutils literal"><span class="pre">isinstance()</span></code></a>的第二个参数中的重复类型。</span><span class="yiyi-st" id="yiyi-154">例如,<code class="docutils literal"><span class="pre">isinstancex</span> <span class="pre">int</span> <span class="pre">int</span></code>被转换为<code class="docutils literal"><span class="pre">isinstancex</span> <span class="pre">int</span></code></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-itertools_imports"><span class="yiyi-st" id="yiyi-155"> <code class="descname">itertools_imports</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-156">删除<code class="xref py py-func docutils literal"><span class="pre">itertools.ifilter()</span></code><code class="xref py py-func docutils literal"><span class="pre">itertools.izip()</span></code><code class="xref py py-func docutils literal"><span class="pre">itertools.imap()</span></code>的导入。</span><span class="yiyi-st" id="yiyi-157">导入<code class="xref py py-func docutils literal"><span class="pre">itertools.ifilterfalse()</span></code>也会更改为<a class="reference internal" href="itertools.html#itertools.filterfalse" title="itertools.filterfalse"><code class="xref py py-func docutils literal"><span class="pre">itertools.filterfalse()</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-itertools"><span class="yiyi-st" id="yiyi-158"> <code class="descname">itertools</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-159"><code class="xref py py-func docutils literal"><span class="pre">itertools.ifilter()</span></code><code class="xref py py-func docutils literal"><span class="pre">itertools.izip()</span></code><code class="xref py py-func docutils literal"><span class="pre">itertools.imap()</span></code>的用法更改为其内建等效项。</span><span class="yiyi-st" id="yiyi-160"><code class="xref py py-func docutils literal"><span class="pre">itertools.ifilterfalse()</span></code>更改为<a class="reference internal" href="itertools.html#itertools.filterfalse" title="itertools.filterfalse"><code class="xref py py-func docutils literal"><span class="pre">itertools.filterfalse()</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-long"><span class="yiyi-st" id="yiyi-161"> <code class="descname">long</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-162"><code class="xref py py-class docutils literal"><span class="pre">long</span></code>重命名为<a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal"><span class="pre">int</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-map"><span class="yiyi-st" id="yiyi-163"> <code class="descname">map</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-164"><a class="reference internal" href="stdtypes.html#list" title="list"><code class="xref py py-class docutils literal"><span class="pre">list</span></code></a>调用中换行<a class="reference internal" href="functions.html#map" title="map"><code class="xref py py-func docutils literal"><span class="pre">map()</span></code></a></span><span class="yiyi-st" id="yiyi-165">它还会更改<code class="docutils literal"><span class="pre">映射(无,</span> <span class="pre">x</span></code><code class="docutils literal"><span class="pre">list(x)</span></code></span><span class="yiyi-st" id="yiyi-166">使用<code class="docutils literal"><span class="pre"></span> <span class="pre">future_builtins</span> <span class="pre">导入</span> <span class="pre">地图</span></code>禁用此修复程序。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-metaclass"><span class="yiyi-st" id="yiyi-167"> <code class="descname">metaclass</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-168">Converts the old metaclass syntax (<code class="docutils literal"><span class="pre">__metaclass__</span> <span class="pre">=</span> <span class="pre">Meta</span></code> in the class body) to the new (<code class="docutils literal"><span class="pre">class</span> <span class="pre">X(metaclass=Meta)</span></code>).</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-methodattrs"><span class="yiyi-st" id="yiyi-169"> <code class="descname">methodattrs</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-170">修复旧方法属性名称。</span><span class="yiyi-st" id="yiyi-171">例如,<code class="docutils literal"><span class="pre">meth.im_func</span></code>被转换为<code class="docutils literal"><span class="pre">meth.__func__</span></code></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-ne"><span class="yiyi-st" id="yiyi-172"> <code class="descname">ne</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-173">将旧的不等式语法<code class="docutils literal"><span class="pre">&lt;&gt;</span></code>转换为<code class="docutils literal"><span class="pre">!=</span></code></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-next"><span class="yiyi-st" id="yiyi-174"> <code class="descname">next</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-175">将迭代器的<code class="xref py py-meth docutils literal"><span class="pre">next()</span></code>方法转换为<a class="reference internal" href="functions.html#next" title="next"><code class="xref py py-func docutils literal"><span class="pre">next()</span></code></a>函数。</span><span class="yiyi-st" id="yiyi-176">它还将<a class="reference internal" href="functions.html#next" title="next"><code class="xref py py-meth docutils literal"><span class="pre">next()</span></code></a>方法重命名为<a class="reference internal" href="stdtypes.html#iterator.__next__" title="iterator.__next__"><code class="xref py py-meth docutils literal"><span class="pre">__next__()</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-nonzero"><span class="yiyi-st" id="yiyi-177"> <code class="descname">nonzero</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-178"><code class="xref py py-meth docutils literal"><span class="pre">__nonzero__()</span></code>重命名为<a class="reference internal" href="../reference/datamodel.html#object.__bool__" title="object.__bool__"><code class="xref py py-meth docutils literal"><span class="pre">__bool__()</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-numliterals"><span class="yiyi-st" id="yiyi-179"> <code class="descname">numliterals</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-180">将八进制字面值转换为新的语法。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-operator"><span class="yiyi-st" id="yiyi-181"> <code class="descname">operator</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-182">将对<a class="reference internal" href="operator.html#module-operator" title="operator: Functions corresponding to the standard operators."><code class="xref py py-mod docutils literal"><span class="pre">operator</span></code></a>模块中各种函数的调用转换为其他函数,但等价的函数调用。</span><span class="yiyi-st" id="yiyi-183">需要时,添加适当的<code class="docutils literal"><span class="pre">import</span></code>语句,例如</span><span class="yiyi-st" id="yiyi-184"><code class="docutils literal"><span class="pre">import</span> <span class="pre">容器</span></code></span><span class="yiyi-st" id="yiyi-185">进行以下映射:</span></p><table border="1" class="docutils"><thead valign="bottom"><tr class="row-odd"><th class="head"><span class="yiyi-st" id="yiyi-186"></span></th><th class="head"><span class="yiyi-st" id="yiyi-187"></span></th></tr></thead><tbody valign="top"><tr class="row-even"><td><span class="yiyi-st" id="yiyi-188"><code class="docutils literal"><span class="pre">operator.isCallable(obj)</span></code></span></td><td><span class="yiyi-st" id="yiyi-189"><code class="docutils literal"><span class="pre">hasattrobj</span> <span class="pre">'__ call __'</span></code></span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-190"><code class="docutils literal"><span class="pre">operator.sequenceIncludes(obj)</span></code></span></td><td><span class="yiyi-st" id="yiyi-191"><code class="docutils literal"><span class="pre">operator.contains(obj)</span></code></span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-192"><code class="docutils literal"><span class="pre">operator.isSequenceType(obj)</span></code></span></td><td><span class="yiyi-st" id="yiyi-193"><code class="docutils literal"><span class="pre">isinstanceobj</span> <span class="pre">容器。序列)</span></code></span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-194"><code class="docutils literal"><span class="pre">operator.isMappingType(obj)</span></code></span></td><td><span class="yiyi-st" id="yiyi-195"><code class="docutils literal"><span class="pre">isinstanceobj</span> <span class="pre">容器.Mapping</span></code></span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-196"><code class="docutils literal"><span class="pre">operator.isNumberType(obj)</span></code></span></td><td><span class="yiyi-st" id="yiyi-197"><code class="docutils literal"><span class="pre">isinstanceobj</span> <span class="pre">numbers.Number</span></code></span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-198"><code class="docutils literal"><span class="pre">operator.repeatobj</span> <span class="pre">n</span></code></span></td><td><span class="yiyi-st" id="yiyi-199"><code class="docutils literal"><span class="pre">operator.mulobj</span> <span class="pre">n</span></code></span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-200"><code class="docutils literal"><span class="pre">operator.irepeatobj</span> <span class="pre">n</span></code></span></td><td><span class="yiyi-st" id="yiyi-201"><code class="docutils literal"><span class="pre">operator.imulobj</span> <span class="pre">n</span></code></span></td></tr></tbody></table></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-paren"><span class="yiyi-st" id="yiyi-202"> <code class="descname">paren</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-203">在列表推导式中添加需要的括号。</span><span class="yiyi-st" id="yiyi-204">For example, <code class="docutils literal"><span class="pre">[x</span> <span class="pre">for</span> <span class="pre">x</span> <span class="pre">in</span> <span class="pre">1,</span> <span class="pre">2]</span></code> becomes <code class="docutils literal"><span class="pre">[x</span> <span class="pre">for</span> <span class="pre">x</span> <span class="pre">in</span> <span class="pre">(1,</span> <span class="pre">2)]</span></code>.</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-print"><span class="yiyi-st" id="yiyi-205"> <code class="descname">print</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-206"><code class="docutils literal"><span class="pre">print</span></code>语句转换为<a class="reference internal" href="functions.html#print" title="print"><code class="xref py py-func docutils literal"><span class="pre">print()</span></code></a>函数。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-raise"><span class="yiyi-st" id="yiyi-207"> <code class="descname">raise</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-208">转换<code class="docutils literal"><span class="pre">提高</span> <span class="pre">E</span> <span class="pre">V</span></code><code class="docutils literal"><span class="pre">提高</span> <span class="pre">E V</span></code><code class="docutils literal"><span class="pre">提高</span> <span class="pre">E</span> <span class="pre">V</span> <span class="pre">/ t7&gt;<code class="docutils literal"><span class="pre">提高</span> <span class="pre">EV.with_tracebackT</span></code></span></code></span><span class="yiyi-st" id="yiyi-209">如果<code class="docutils literal"><span class="pre">E</span></code>是元组则翻译将不正确因为替换元组在3.0中已除去异常。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-raw_input"><span class="yiyi-st" id="yiyi-210"> <code class="descname">raw_input</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-211"><code class="xref py py-func docutils literal"><span class="pre">raw_input()</span></code>转换为<a class="reference internal" href="functions.html#input" title="input"><code class="xref py py-func docutils literal"><span class="pre">input()</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-reduce"><span class="yiyi-st" id="yiyi-212"> <code class="descname">reduce</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-213">处理<code class="xref py py-func docutils literal"><span class="pre">reduce()</span></code><a class="reference internal" href="functools.html#functools.reduce" title="functools.reduce"><code class="xref py py-func docutils literal"><span class="pre">functools.reduce()</span></code></a>的移动。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-reload"><span class="yiyi-st" id="yiyi-214"> <code class="descname">reload</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-215"><code class="xref py py-func docutils literal"><span class="pre">reload()</span></code>转换为<a class="reference internal" href="imp.html#imp.reload" title="imp.reload"><code class="xref py py-func docutils literal"><span class="pre">imp.reload()</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-renames"><span class="yiyi-st" id="yiyi-216"> <code class="descname">renames</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-217"><code class="xref py py-data docutils literal"><span class="pre">sys.maxint</span></code>更改为<a class="reference internal" href="sys.html#sys.maxsize" title="sys.maxsize"><code class="xref py py-data docutils literal"><span class="pre">sys.maxsize</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-repr"><span class="yiyi-st" id="yiyi-218"> <code class="descname">repr</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-219"><a class="reference internal" href="functions.html#repr" title="repr"><code class="xref py py-func docutils literal"><span class="pre">repr()</span></code></a>函数替换backtick repr。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-set_literal"><span class="yiyi-st" id="yiyi-220"> <code class="descname">set_literal</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-221">用set字面值替换<a class="reference internal" href="stdtypes.html#set" title="set"><code class="xref py py-class docutils literal"><span class="pre">set</span></code></a>构造函数的使用。</span><span class="yiyi-st" id="yiyi-222">此修订包是可选的。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-standarderror"><span class="yiyi-st" id="yiyi-223"> <code class="descname">standarderror</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-224"><code class="xref py py-exc docutils literal"><span class="pre">StandardError</span></code>重命名为<a class="reference internal" href="exceptions.html#Exception" title="Exception"><code class="xref py py-exc docutils literal"><span class="pre">Exception</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-sys_exc"><span class="yiyi-st" id="yiyi-225"> <code class="descname">sys_exc</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-226">更改已弃用的<code class="xref py py-data docutils literal"><span class="pre">sys.exc_value</span></code><code class="xref py py-data docutils literal"><span class="pre">sys.exc_type</span></code><code class="xref py py-data docutils literal"><span class="pre">sys.exc_traceback</span></code>以使用<a class="reference internal" href="sys.html#sys.exc_info" title="sys.exc_info"><code class="xref py py-func docutils literal"><span class="pre">sys.exc_info()</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-throw"><span class="yiyi-st" id="yiyi-227"> <code class="descname">throw</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-228">修复生成器的<code class="xref py py-meth docutils literal"><span class="pre">throw()</span></code>方法中的API更改。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-tuple_params"><span class="yiyi-st" id="yiyi-229"> <code class="descname">tuple_params</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-230">删除隐式元组参数分拆。</span><span class="yiyi-st" id="yiyi-231">此修订包插入临时变量。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-types"><span class="yiyi-st" id="yiyi-232"> <code class="descname">types</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-233">修复因删除<a class="reference internal" href="types.html#module-types" title="types: Names for built-in types."><code class="xref py py-mod docutils literal"><span class="pre">types</span></code></a>模块中的某些成员而导致的代码。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-unicode"><span class="yiyi-st" id="yiyi-234"> <code class="descname">unicode</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-235"><code class="xref py py-class docutils literal"><span class="pre">unicode</span></code>重命名为<a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-urllib"><span class="yiyi-st" id="yiyi-236"> <code class="descname">urllib</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-237">处理<a class="reference internal" href="urllib.html#module-urllib" title="urllib"><code class="xref py py-mod docutils literal"><span class="pre">urllib</span></code></a><code class="xref py py-mod docutils literal"><span class="pre">urllib2</span></code>的重命名为<a class="reference internal" href="urllib.html#module-urllib" title="urllib"><code class="xref py py-mod docutils literal"><span class="pre">urllib</span></code></a>包。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-ws_comma"><span class="yiyi-st" id="yiyi-238"> <code class="descname">ws_comma</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-239">从逗号分隔的项目中删除多余的空格。</span><span class="yiyi-st" id="yiyi-240">此修订包是可选的。</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-xrange"><span class="yiyi-st" id="yiyi-241"> <code class="descname">xrange</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-242"><code class="xref py py-func docutils literal"><span class="pre">xrange()</span></code>重新命名为<a class="reference internal" href="stdtypes.html#range" title="range"><code class="xref py py-func docutils literal"><span class="pre">range()</span></code></a>并用<a class="reference internal" href="stdtypes.html#list" title="list"><code class="xref py py-class docutils literal"><span class="pre">list</span></code></a>包装现有<a class="reference internal" href="stdtypes.html#range" title="range"><code class="xref py py-func docutils literal"><span class="pre">range()</span></code></a></span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-xreadlines"><span class="yiyi-st" id="yiyi-243"> <code class="descname">xreadlines</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-244">Changes <code class="docutils literal"><span class="pre">for</span> <span class="pre">x</span> <span class="pre">in</span> <span class="pre">file.xreadlines()</span></code> to <code class="docutils literal"><span class="pre">for</span> <span class="pre">x</span> <span class="pre">in</span> <span class="pre">file</span></code>.</span></p></dd></dl><dl class="2to3fixer"><dt id="2to3fixer-zip"><span class="yiyi-st" id="yiyi-245"> <code class="descname">zip</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-246"><a class="reference internal" href="stdtypes.html#list" title="list"><code class="xref py py-class docutils literal"><span class="pre">list</span></code></a>调用中封装<a class="reference internal" href="functions.html#zip" title="zip"><code class="xref py py-func docutils literal"><span class="pre">zip()</span></code></a>使用。</span><span class="yiyi-st" id="yiyi-247">当出现<code class="docutils literal"><span class="pre"></span> <span class="pre">future_builtins</span> <span class="pre">import</span> <span class="pre">zip</span></code>时,</span></p></dd></dl></div><div class="section" id="module-lib2to3"><h2><span class="yiyi-st" id="yiyi-248">26.7.3. <a class="reference internal" href="#module-lib2to3" title="lib2to3: the 2to3 library"><code class="xref py py-mod docutils literal"><span class="pre">lib2to3</span></code></a> - 2to3的库</span></h2><p><span class="yiyi-st" id="yiyi-249"><strong>源代码:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/lib2to3/">Lib/lib2to3/</a></span></p><div class="admonition note"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-250">注意</span></p><p class="last"><span class="yiyi-st" id="yiyi-251"><a class="reference internal" href="#module-lib2to3" title="lib2to3: the 2to3 library"><code class="xref py py-mod docutils literal"><span class="pre">lib2to3</span></code></a> API应被视为不稳定并且将来可能会发生巨大变化。</span></p></div></div></div></div>