多语言展示
当前在线:832今日阅读:167今日分享:16

如何解决(写出)python2和python3不兼容的问题

相信很多python程序员和python爱好者都知道,Python3变化了很多,Python2的代码在Python3解释器上可能无法运行,原因就是因为很多东西都被改动。遇到这样的问题,我们如果要考虑到解释器兼容,应该怎么办呢?下面小编就针对这个问题,教小伙伴如何解决这个问题(写出兼容Python2和Python3的Python代码)。
工具/原料

Python

方法/步骤
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 sysif(sys.version[0] == '3'):    import tkinter as mytkelse:    import Tkinter as mytkwindow = mytk.Tk()window.mainloop()这样是不是就解决了模块名的问题?

5

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

6

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

是否帮到了您?如果有帮到您,请点个关注、点个投票、点个分享、点个赞
1

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

2

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

3

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

4

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

注意事项
1

如有疑问,点击左下角的投票或者有得给小编留言,小编看到会第一时间回复您,谢谢

2

如果喜欢本经验,请关注我。可以把它分享给您的朋友,请点个投票点个收藏。谢谢,您的支持是我最大的动力。

推荐信息