如何解决(写出)python2和python3不兼容的问题
1、这里有两个兼容思路:
第一,不考虑跨平台,生成操作系统的可执行文件,而非py代码文件。
第二,通过代码实现(跨平台跨解释器,这也是小编接下来要教小伙伴的东西)。
最典型的问题——Python的内置图形库,Tkinter图形库。
我们都知道,我们Python2中导Tk包的时候为import Tkinter,而在Python3中则为import tkinter。
如图(图为python3执行import Tkinter报错和Python2执行import tkinter报错)
都是提示没有找到模块名,显然,Python3没有考虑太多向下兼容的问题,而问题来了,国内有绝大部分linux服务器上安装的还是python2(也是大部分linux默认的python解释器)


2、其实我们在代码方面要做的事相当简单,还是以Tkinter库为例:
如果python解释器为3,我们就import tkinter,如果是python2,我们就import Tkinter,这样是不是相当简单?
在这之前,我们需要获得Python解释器版本号,这里sys模块提供了一个变量(记得是一个模块内的变量),即version
在python3打印出这个变量看看是什么?
可以看到,这个变量正确的打印出我们要的解释器版本号。python3.4.3

3、那么,后面的一些信息显然不重要,例如硬件架构、发行时间。这些我们要怎么缩减掉呢?
例如小编这里的3.4.3,我们要的只是主版本号信息,也就是3这个数据
因此我们只需要获得sys.version[0]即可,是不是?
print(sys.version[0])
打印出主版本信息
当然,我们如果某种特殊要求,想获得后两位版本信息可以用字符串切片方式——即sys.version[:5]或者sys.version[0:5]取前5位字符。

4、我们知道怎么获得版本信息之后,想根据主版本来判断导入的模块名,不是很简单吗?我们只需要给模块起个别名即可。
import sys
if(sys.version[0] == '3'):
import tkinter as mytk
else:
import Tkinter as mytk
window = mytk.Tk()
window.mainloop()
这样是不是就解决了模块名的问题?

5、在python3和python2中完美运行,无报错。


6、最后一点就是Python的其他改动问题,最常见的print语句。
在python2中,print是一条语句,而在python3中,print是一个函数(方法)
最好的办法就是使用Python3的规定,用括号括起来。
总结下:解决模块名不兼容的问题,用if做判断然后做一个模块引入的处理,其他的变动,统一使用python3的规定(奇怪的是python2是兼容的)

1、怎么关注?
在经验的右上角小编头像旁边点击关注,如图。

2、怎么点赞?
请在经验左侧点赞,如图。

3、怎么投票?
在经验的下方点击投票,如图。

4、如果觉得小编写的还不错,可以动动鼠标把它分享给您的朋友。
如何分享,鼠标移动到右下角第一个按钮上,在弹出的选项中进行分享,如图。
不尽感激。
