Python进阶 兼容Python2+3

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: 


模块重命名

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的兼容。

from future.builtins.disabled import *

apply()
# 在Python3中使用这些被遗弃的模块时,就会抛出一个NameError异常如下:
# Output: NameError: obsolete Python 2 builtin apply is disabled


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

有一些包在非官方的支持下为Python2提供了Python3的功能。例如:

  • enum pip install enum34
  • singledispatch pip install singledispatch
  • pathlib pip install pathlib



官方指南

你可能感兴趣的:(Python进阶 兼容Python2+3)