脚本相同时Python2和Python3如何兼容?

程序开发人员经常遇到的问题是,有很多开发人员都在使用一个非常知名的Python模块,但是并非所有人都只使用Python 2或Python3。这时您有两个选择,第一种方法是开发两个模块,一个用于Python2,一个用于Python3;另一种方法是调整当前代码,使其与Python2和Python3兼容。本文将介绍一些方法,使您的脚本与Python2和Python3兼容。

 Future模块导⼊

这也是最重要的⽅法,就是导⼊__future__模块。它可以帮你在Python2中导⼊Python3的功能。这有⼀组例⼦。上下⽂管理器是Python2.6+引⼊的新特性,如果你想在Python2.5中使⽤它可以这样做:

from __future__ import with_statement

在Python3中print已经变为⼀个函数。如果你想在Python2中使⽤它可以通过__future__导⼊:

print

# Output:

from __future__ import print_function

print(print)

# Output:

模块重命名

⾸先,⼤多时候我们会这样在脚本中导⼊模块:

import foo

# or

from foo import bar

其实你也可以这样做:

import foo as foo

这样做可以起到和上⾯代码同样的功能,但最重要的是它能让你的脚本同时兼容Python2和Python3。现在我们来看下⾯的代码:

try:

import urllib.request as urllib_request # for Python 3

except ImportError:

import urllib2 as urllib_request # for Python 2

稍微解释⼀下上⾯的代码。我们将模块导⼊代码包装在try/except语句中。我们是这样做是因为在Python 2中并没有urllib.request模块。这将引起⼀个ImportError异常。⽽在Python2中urllib.request的功能则是由urllib2提供的。所以,当我们试图在Python2中导⼊urllib.request模块的时候,⼀旦我们捕获到ImportError我们将通过导⼊urllib2模块来代替它。

最后,你要了解as关键字的作⽤。它将导⼊的模块映射到urllib.request,所以我们通过urllib_request这个别名就可以使⽤urllib2中的所有类和⽅法了。

 过期的Python2内置功能

另⼀个需要了解的事情就是Python2中有12个内置功能在Python3中已经被移除了。要确保在Python2代码中不要出现这些功能来保证对Python3的兼容。这有⼀个强制让你放弃12内置功能的⽅法:

from future.builtins.disabled import *

现在,只要你尝试在Python3中使⽤这些被遗弃的模块时,就会抛出⼀个NameError异常,如下:

from future.builtins.disabled import *

apply()

# Output: NameError: obsolete Python 2 builtin apply is disabled

 标准库向下兼容的外部⽀持

有⼀些包在⾮官⽅的⽀持下为Python2提供了Python3的功能。例如我们有:

enum pip install enum34

singledispatch pip install singledispatch

pathlib pip install pathlib

以上就是全部的方法,看到这里,相信大家已经明白了脚本相同时Python2和Python3如何兼容。如果要想学习更多关于Python的信息,请继续关注。

脚本相同时Python2和Python3如何兼容?_业界动态_行业云
48
94
0
29

相关资讯

  1. 1、吴卓林竟然秘密“结婚”了,女友晒幸福泄密,大喊小龙女是未婚夫2264
  2. 2、《厨戏痞》曝疯戏子特辑张涵予骂街唱戏样样通4775
  3. 3、《故宫修文物》导演再战大银幕,携手平凡人讲述“百年”人生1259
  4. 4、【娱乐观】抵制杜汶泽:不服从者不得食!2923
  5. 5、张子枫新电影受争议,但在演技上,着实令人服气4354
  6. 6、《小时代》首映日排片破记录火爆程度成影史奇迹4028
  7. 7、《五个姐姐》叫我姐姐发布会,3unshineSlay全场1105
  8. 8、与释小龙齐名,出道被王晶力捧,合作李连杰走红,今成烂片主演2792
  9. 9、周杰伦陪昆凌甜蜜逛街两人同框表情神同步满满夫妻相4349
  10. 10、迟到了三十年,但这只《龙猫》终于还是来了3776
全部评论(0)
我也有话说
0
收藏
点赞
顶部