• 在线客服

  • 扫描二维码
    下载博学谷APP

  • 扫描二维码
    关注博学谷微信公众号

  • 意见反馈

原创 如何让脚本同时兼容Python2和Python3?

发布时间:2020-07-03 12:20:50 浏览 3471 来源:博学谷 作者:照照

    程序开发者常常会遇到的问题是,有⼀个⾮常出名的Python模块被很多开发者使⽤着,但并不是所有⼈都只使⽤Python2或者Python3。这时候你有两个办法。第⼀个办法是开发两个模块,针对Python2⼀个,针对Python3⼀个。还有⼀个办法就是调整你现在的代码使其同时兼容Python2Python3。本文将介绍⼀些方法,让你的脚本同时兼容Python2Python3

     

    同时兼容Python2和Python3

     

    Future模块导⼊

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

    from __future__ import with_statement

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

    print

    # Output:

     

    from __future__ import print_function

    print(print)

    # Output: <built-in function print>

    模块重命名

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

    import foo

    # or

    from foo import bar

    其实你也可以这样做:

    import foo as foo

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

    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异常。⽽在Python2urllib.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的干货,可以在博学谷找到很多优质的Python在线课程,一起来看看吧~

    申请免费试学名额    

在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!

上一篇: Python for循环学习总结笔记 下一篇: Python的特性与搭建环境

相关推荐 更多

热门文章

  • 前端是什么
  • 前端开发的工作职责
  • 前端开发需要会什么?先掌握这三大核心关键技术
  • 前端开发的工作方向有哪些?
  • 简历加分-4步写出HR想要的简历
  • 程序员如何突击面试?两大招带你拿下面试官
  • 程序员面试技巧
  • 架构师的厉害之处竟然是这……
  • 架构师书籍推荐
  • 懂了这些,才能成为架构师
  • 查看更多

扫描二维码,了解更多信息

博学谷二维码