哪些2to3修复程序输出有效的Python 2代码?

Col*_*nic 6 python python-2to3 python-3.x

2to3是一个Python程序,可读取Python 2.x源代码并应用一系列修复程序将其转换为有效的Python 3.x代码。

考虑一下https://docs.python.org/3.4/library/2to3.html#fixers列出的40个修复程序。根据设计,它们都输出有效的Python 3代码。哪个输出有效的Python 2代码?

例如,定影液NE说,“转换旧不等于语法<>,以!=”有这个属性,因为!=是有效的Python 2以及Python 3中。

而“重命名__nonzero____bool__” 的修复程序NONZERO 没有该属性,因为__bool__Python 2.7中没有函数。

小智 0

来自Python 3.0 的新增功能

\n\n
\n

不建议尝试编写在 Python 2.6 和 3.0 下都运行的源代码;你\xe2\x80\x99d 必须使用非常扭曲的\n 编码风格,例如避免打印语句、元类等等\n。如果您正在维护一个需要同时支持 Python 2.6 和 Python 3.0 的库,最好的方法是修改上面的步骤 3,编辑 2.6 版本的源代码并再次运行 2to3 转换器,而不是编辑 3.0 版本的源代码。

\n
\n\n

那里的链接非常好,因为它还列出了 3.0 中的大部分主要新功能和变化

\n\n

至于你的问题,我能找到的最接近你要求的是Six,它不是转换器或修复器,而是一个为你处理大量扭曲编码的兼容性库。也就是说,我不知道它的工作效果如何,并且无论如何都需要对现有代码进行大量更改才能利用它。

\n\n

主要问题是 Python 3.x 改变了语法的许多基本方面,如果没有某种兼容层,相同的代码几乎不可能在 3.x 和 2.x 上以相同的方式工作。Python 2 的字符串与 Python 3 的字符串不同。整数也是如此,Python 3 甚至不再有 long 类型(Python 3 int 就是以前的 long,而旧的 Python 2 int 已经消失了)。许多内置函数和属性已被重命名或修改,并且大多数语法已被更改或清理,从而完全破坏了向后兼容性。

\n\n

使用 2to3 将代码移植到 Python 3解释了一些关于 2to3 及其用途的内容,并且列出的大量语法更改应该足以解释为什么生成的代码不再适用于 Python 2.x。

\n

  • 谢谢。我在我的项目中使用了六。这些发行说明是妄想。 (4认同)
  • 这个答案回答了另一个问题。问题是“哪些 2to3 修复程序输出有效的 Python 2 代码?” (2认同)