Python3和Python2是不兼容的,但是由于一些历史遗留问题,比如一些服务器只安装有Python2,一些安装有Python3,所以我们在实际写代码的时候就不得不考虑兼容Python2和Python3了。
下面简单介绍两种兼容Python2和Python3的导入库的方法。
一:使用ImportError
以configparser为例。读写配置模块在Python2中是大写开头的的Configparser,在Python3中是小写的configparser,这就导致了读写配置的代码不能直接兼容Python2和Python3。我们需要做一些修改,利用ImportError,不管三七二十一,先导入一个版本,如果出现ImportError在切换到另外一个版本。不是configparser就是Configparser
# -*- coding: utf-8 -*-
try:
# Python3
from configparser import ConfigParser
except ImportError:
# Python2
from ConfigParser import ConfigParser
config = ConfigParser()
# do something
代码修改为下面的也可以,先导入Python2的版本,出错再导入Python3的版本。
# -*- coding: utf-8 -*-
try:
# Python2
from ConfigParser import ConfigParser
except ImportError:
# Python3
from configparser import ConfigParser
config = ConfigParser()
# do something
我们再举一个例子。
urllib库也是不兼容Python2和Python3的。废话少说,直接上代码:
# -*- coding: utf-8 -*-
try:
# Python2
from urllib import urlencode
from urllib import quote
from urlparse import urlparse
import urllib2 as request
except ImportError:
# Python3
from urllib.parse import urlencode
from urllib.parse import quote
from urllib.parse import urlparse
import urllib.request as request
# do something
二:根据版本来判断
根据sys.version_info.major来判断Python的版本,根据不同的版本导入不同的库。
# -*- coding: utf-8 -*-
import sys
if sys.version_info.major == 2:
# Python2
from urllib import urlencode
from urllib import quote
from urlparse import urlparse
import urllib2 as request
else:
# Python3
from urllib.parse import urlencode
from urllib.parse import quote
from urllib.parse import urlparse
import urllib.request as request
# do something