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

时间:2014-10-06 19:49:35

标签: python python-3.x python-2to3

  

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

考虑https://docs.python.org/3.4/library/2to3.html#fixers列出的四十个修复者。按照设计,它们都输出有效的Python 3代码。哪个输出有效 Python 2 代码?

例如,定位器NE将旧的不等语法<>转换为!=&#34;具有此属性,因为!=是有效的Python 2以及Python 3。

修复者NONZERO&#34;将__nonzero__重命名为__bool__&#34;没有属性,因为Python 2.7中没有函数__bool__

1 个答案:

答案 0 :(得分:1)

来自What's New In Python 3.0

  

不建议尝试编写未更改的源代码   在Python 2.6和3.0下;你必须使用非常扭曲的   编码风格,例如避免打印语句,元类等等   更多。如果您要维护一个需要同时支持这两者的库   Python 2.6和Python 3.0,最好的方法是修改上面的第3步   通过编辑2.6版本的源代码并运行2to3   翻译再次,而不是编辑3.0版本的源   代码。

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

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

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

Porting code to Python 3 with 2to3解释了一下2to3以及它的作用,并且列出的大量语法更改应该足以解释为什么生成的代码不再适用于Python 2.x.