Python进阶 兼容Python2+3
2018-06-13 本文已影响8人
FicowShen
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: <built-in function print>
模块重命名
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