温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么让脚本同时兼容Python2和Python3

发布时间:2021-07-22 18:22:35 来源:亿速云 阅读:126 作者:chen 栏目:大数据

这篇文章主要讲解了“怎么让脚本同时兼容Python2和Python3”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么让脚本同时兼容Python2和Python3”吧!

  程序开发者常常会遇到的问题是,有⼀个⾮常出名的Python模块被很多开发者使⽤着,但并不是所有⼈都只使⽤Python2或者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”的内容了,经过本文的学习后,相信大家对怎么让脚本同时兼容Python2和Python3这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI