python2x如何迁移代码到python3中

2to3 - 自动Python 2到3代码转换

2to3是一个Python程序,它读取Python 2.x源代码并应用一系列修复程序将其转换为有效的Python 3.x代码。标准库包含一组丰富的修复程序,可以处理几乎所有代码。但是,2to3支持库lib2to3是一个灵活的通用库,因此可以为2to3编写自己的修复程序。 lib2to3也可以适用于需要自动编辑Python代码的自定义应用程序。

使用2to3的

2to3通常与Python解释器一起安装为脚本。它也位于Python根目录Tools / scripts目录中。

2to3的基本参数是要转换的文件或目录的列表。这些目录将以递归方式遍历Python源代码。

以下是Python 2.x源文件示例example.py

def  greet name ):
    打印 “你好,{0}!” 格式名称打印 “你叫什么名字?” 
name  =  raw_input ()
greet name 

它可以通过命令行上的2to3转换为Python 3.x代码:

$ 2to3 example.py

打印对原始源文件的差异。2to3还可以将所需的修改写回源文件。(当然,除非也给出-n,否则也会对原始文​​件进行备份。)使用-w标志启用后面的更改

$ 2to3 -w example.py

转换后,example.py看起来像这样:

def  greet name ):
    print “Hello,{0}!” format name ))
print “你叫什么名字?” name  =  input ()
greet name 

在整个翻译过程中保留评论和精确缩进。

默认情况下,2to3运行一组预定义的修复程序。-l标志列出所有可用的固定器。可以使用-f给出一组明确的运行 修复程序同样,-x显式禁用修复程序。以下示例仅运行importshas_key修复程序:

$ 2to3 -f进口-f has_key example.py

此命令运行除应用修复程序之外的每个修复程序:

$ 2to3 -x应用example.py

某些修复程序是显式的,这意味着它们不是默认运行的,必须在命令行中列出才能运行。在这里,除了默认修复程序之外,还运行成语修复程序:

$ 2to3 -f all -f idioms example.py

请注意如何通过all来启用所有默认修复程序。

有时2to3会在源代码中找到需要更改的位置,但2to3无法自动修复。在这种情况下,2to3将在文件的差异下打印警告。您应该解决警告以获得兼容的3.x代码。

2to3也可以重构doctests。要启用此模式,请使用-d 标志。请注意,只有 doctests才会被重构。这也不要求模块是有效的Python。例如,rest文档中的doctest示例也可以使用此选项进行重构。

-v选项可以对翻译过程的详细信息输出。

-p通过时,2to3将print视为函数而不是语句。 __future__ import print_function使用这很有用。如果未给出此选项,则打印修复程序将在一组额外的括号中包围打印调用,因为它无法区分带括号的print语句(例如print (“a” “b” “c”))和a真正的函数调用。

lib2to3 - 2to3的库

警告

 

lib2to3 API应被视为不稳定,可能会在未来发生急剧变化。

posted @ 2018-08-05 22:27  大叔级别  阅读(332)  评论(0编辑  收藏  举报