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

2026-02-14 14:23:35

1、这里有两个兼容思路:

第一,不考虑跨平台,生成操作系统的可执行文件,而非py代码文件。

第二,通过代码实现(跨平台跨解释器,这也是小编接下来要教小伙伴的东西)。

最典型的问题——Python的内置图形库,Tkinter图形库。

我们都知道,我们Python2中导Tk包的时候为import Tkinter,而在Python3中则为import tkinter。

如图(图为python3执行import Tkinter报错和Python2执行import tkinter报错)

都是提示没有找到模块名,显然,Python3没有考虑太多向下兼容的问题,而问题来了,国内有绝大部分linux服务器上安装的还是python2(也是大部分linux默认的python解释器)

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

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

2、其实我们在代码方面要做的事相当简单,还是以Tkinter库为例:

如果python解释器为3,我们就import tkinter,如果是python2,我们就import Tkinter,这样是不是相当简单?

在这之前,我们需要获得Python解释器版本号,这里sys模块提供了一个变量(记得是一个模块内的变量),即version

在python3打印出这个变量看看是什么?

可以看到,这个变量正确的打印出我们要的解释器版本号。python3.4.3

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

3、那么,后面的一些信息显然不重要,例如硬件架构、发行时间。这些我们要怎么缩减掉呢?

例如小编这里的3.4.3,我们要的只是主版本号信息,也就是3这个数据

因此我们只需要获得sys.version[0]即可,是不是?

print(sys.version[0])

打印出主版本信息

当然,我们如果某种特殊要求,想获得后两位版本信息可以用字符串切片方式——即sys.version[:5]或者sys.version[0:5]取前5位字符。

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

4、我们知道怎么获得版本信息之后,想根据主版本来判断导入的模块名,不是很简单吗?我们只需要给模块起个别名即可。

import sys

if(sys.version[0] == '3'):

    import tkinter as mytk

else:

    import Tkinter as mytk

window = mytk.Tk()

window.mainloop()

这样是不是就解决了模块名的问题?

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

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

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

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

6、最后一点就是Python的其他改动问题,最常见的print语句。

在python2中,print是一条语句,而在python3中,print是一个函数(方法)

最好的办法就是使用Python3的规定,用括号括起来

总结下:解决模块名不兼容的问题,用if做判断然后做一个模块引入的处理,其他的变动,统一使用python3的规定(奇怪的是python2是兼容的)

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

1、怎么关注?

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

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

2、怎么点赞?

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

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

3、怎么投票?

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

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

4、如果觉得小编写的还不错,可以动动鼠标把它分享给您的朋友。

如何分享,鼠标移动到右下角第一个按钮上,在弹出的选项中进行分享,如图。

不尽感激。

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

猜你喜欢