一:使用ImportError,Python3中将一些Python2的模块名称做了修改,需要我们做一些处理来保证代码在不同Python版本中能够正常运行

# -*- coding: utf- -*-

try:
# Python3
from configparser import ConfigParser
except ImportError:
# Python2
from ConfigParser import ConfigParser config = ConfigParser() # do something

urllib库也是不兼容Python2和Python3的

# -*- coding: utf- -*-

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- -*-
import sys if sys.version_info.major == :
# 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

三、使用脚本将py2代码转为py3

使用命令2to3 -w file.py可以直接在原地修改文件。其他命令可以使用2to3 --help查看;2to3 file.py可以看到转变前后的内容对比

2to3是python自带的一个代码转换工具,可以将python2的代码自动转换为python3的代码。当然,不幸的是转换出的代码并没有对python2的兼容做任何的处理。所以我们并不真正使用2to3转换出的代码。执行 2to3 file.py 查看输出信息,并修正相关问题。

四、使用python -3执行python程序

2to3 可以检查出很多python2&3的兼容性问题,但也有很多问题是2to3发现不了的。在加上 -3 参数后,程序在运行时会在控制台上将python2和python3不一致,同时2to3无法处理的问题提示出来。比如python3和python2中对除法的处理规则做过改变。使用-3参数执行4/2将提示 DeprecationWarning: classic int division 。

python -3 file.py

五、使用__future__导入

使用python3的print函数,禁用python2的print语句:from __future__ import print_function

像python3一样,int除以int得float,而不像Python2那样是整除:from __future__ import division

像python3一样,字符串字面量的类型为文本(python2中的unicode,python3中的str),而不是字节(python2中的str,python3中的bytes)

from __future__ import unicode_literal

python2和python3的print不完全一样,print在python2中是个关键字,是个函数

Python3 Python2
input() raw.input(),sys.readline()
整除// /
Python3 Python2
unittest.mock.MagicMock mock.MagicMock
urllib.request.urlretrieve urllib.urlretrieve
queue Queue
functools.reduce reduce

列表推导式的变量作用域

在Python2中,列表推导式中的索引变量的是可以泄露到其封闭作用域中的。而Python3中则不可以。
下面举一个简单的例子说明这个问题,如我们在一个for循环内部使用列表推导式

for i in range(2):
    a = [i for i in range(5)]
    print(i)
1
2
3
在Python3中,上面的代码输出为

>>0
>>1
1
2
而在Python2中,上面的代码输出为

>>4
>>4

参考:

http://python.jobbole.com/83987/

https://blog.csdn.net/u012151283/article/details/58049151

python2 和 python3兼容写法的更多相关文章

  1. Python2与Python3兼容

    Python2与Python3兼容 python3写的代码如何也能在pyhon2上跑?请无论如何加上这一句,python3没有啥影响 from __future__ import absolute_i ...

  2. Windows同时安装Python2、Python3兼容运行

    Python2.Python3可以同时安装在windows上,关键是如何有选择的运行Python2还是Python3.   指定运行版本 如果你有一个Python文件叫 hello.py,那么你可以这 ...

  3. Windows下python2与python3兼容设置

    分别安装python2与python3后,我想直接通过命令python2.pip2与python3.pip3区分: 分别进入python安装目录下,修改python.exe为python2.exe.p ...

  4. 让你的python程序同时兼容python2和python3

    python邮件列表里有人发表言论说「python3在10内都无法普及」.在我看来这样的观点有些过于悲观,python3和python2虽然不兼容,但他们之间差别并没很多人想像的那么大.你只需要对自己 ...

  5. Python - Python2与Python3的区别、转换与兼容

    区别 Python2.x与Python3.x版本区别:http://www.runoob.com/python/python-2x-3x.html 示例解读Python2和Python3之间的主要差异 ...

  6. 当同时安装Python2和Python3后,如何兼容并切换使用详解(比如pip使用)

    由于历史原因,Python有两个大的版本分支,Python2和Python3,又由于一些库只支持某个版本分支,所以需要在电脑上同时安装Python2和Python3,因此如何让两个版本的Python兼 ...

  7. 同时安装Python2和Python3,如何兼容并切换使用详解

    由于历史原因,Python有两个大的版本分支,Python2和Python3,又由于一些库只支持某个版本分支,所以需要在电脑上同时安装Python2和Python3,因此如何让两个版本的Python兼 ...

  8. Windows下同时安装python2和python3如何兼容版本

    引言:因学习需要把python2和python3都安装了,为了避免使用过程中混淆版本在网上找了一些解决方案,亲测可用.方法如下: 分别下载并安装Python2.x和Python3.x. 配置环境变量. ...

  9. windows下 兼容Python2和Python3

    windows下同时安装了python2和python3时,都可以配置环境变量,如果在命令行里输入python命令,windows会去环境变量里寻找Python的安装位置,如果先找到pytoon2的, ...

随机推荐

  1. 关于日志API接口中流量的使用。

    现状: 目前服务器使用带宽是2M,那么最大上行流量应该是250kb/s,而通过日志发现目前最大并发流量是350kb/s. 问题: 看到以上的结果时,我当时的疑问是最大并发流量超过了服务器最大上行流量, ...

  2. Ionic Js三:下拉刷新

    在加载新数据的时候,我们需要实现下拉刷新效果,代码如下: HTML 代码 <body ng-app="starter" ng-controller="actions ...

  3. c++ 栈(顺序表)

    栈可以用顺序表(数组)也可以用链表来储存内容,本文采用顺序表(数组)来保存内部元素.代码如下:  1 #include <iostream> 2 using namespace std; ...

  4. JAVAEE——宜立方商城10:使用freemarker实现网页静态化、ActiveMq同步生成静态网页、Sso单点登录系统分析

    1. 学习计划 1.使用freemarker实现网页静态化 2.ActiveMq同步生成静态网页 2. 网页静态化 可以使用Freemarker实现网页静态化. 2.1. 什么是freemarker ...

  5. web过滤器使用spring依赖注入

    1.问题描述 在web项目中,使用filter过滤器十分常见,但是在过滤器中spring Bean即使在配置文件中配置了扫描filter对应的包,也无法正确注入spring 管理的Bean. 2.原因 ...

  6. ASP.NET MVC 提高运行速度的几种性能优化方法

    主要介绍ASP.NETMVC 应用提速的六种方法,因为没有人喜欢等待,所以介绍几种常用的优化方法. 大家可能会遇到排队等待,遇到红灯要等待,开个网页要等待,等等等. 理所当然,没有人喜欢等待网页慢吞吞 ...

  7. 1024 Palindromic Number (25)(25 point(s))

    problem A number that will be the same when it is written forwards or backwards is known as a Palind ...

  8. 怎么处理stdClass::__set_state

    处理后 处理方法 function object2array_pre(&$object) { if (is_object($object)) { $arr = (array)($object) ...

  9. Kali2.0通过xrdp实现windows远程链接Linux

    标题:Kali2.0通过xrdp实现windows远程链接Linux apt-get install xrdp 首先需要安装xrdp 接下来安装xfce4 apt-get install xfce4 ...

  10. 撩课-Java每天5道面试题第13天

    撩课Java+系统架构点击开始学习 96.JDBC操作数据库的步骤 ? .加载数据库驱动 .创建并获取数据库链接 .创建jdbc statement对象 .设置sql语句 .设置sql语句中的参数(使 ...