一:使用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. idea 设置svn忽略 .idea内的文件

    从ToolView中打开 Version Control  -> Local Changes  中的Default ChangesList里面的文件全选中右键选择 Move to  Anothe ...

  2. thinkphp结合ajax实现统计页面pv的浏览量

    统计pv量很常用,下面的代码用ajax实现的,使用ajax可以避免页面缓存造成的影响,只要客户端的js代码执行了就可以统计流量. 一共就两部 将下面代码放在要统计的html页面中,测试时把地址换成自己 ...

  3. 2011年入侵 Kernel.org 的黑客被捕 面临10年监禁

    2011年中旬,Linux内核官网kernel.org遭到黑客入侵,攻击者植入了rootkit Phalanx,并在服务器上设置了SSH后门,kernel.org为此关闭了三周多时间.官方表示将会公开 ...

  4. Hadoop CapacitySchedule配置

    下面是Hadoop中CapacitySchedule配置,包含了新建队列和子队列 <configuration> <property> <name>yarn.sch ...

  5. RTSP 资料

    分享两个不错的播客. http://blog.csdn.net/u010425035/article/details/10410851 http://blog.csdn.net/xiaoyafang1 ...

  6. 远程连接mysql root账号报错:2003-can't connect to MYSQL serve(转)

    远程连接mysql root账号报错:2003-can't connect to MYSQL serve 1.远程连接Linux系统,登录数据库:mysql -uroot -p(密码) 2.修改roo ...

  7. redis在Linux下的远程连接

    1.redis在Linux下的远程连接: $ redis-cli -h host -p port -a password 如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass ...

  8. Category 特性在 iOS 组件化中的应用与管控

    背景 iOS Category功能简介 Category 是 Objective-C 2.0之后添加的语言特性. Category 就是对装饰模式的一种具体实现.它的主要作用是在不改变原有类的前提下, ...

  9. Python使用正则

    Python中使用正则的两种方式 在Python中有两只能够使用正则表达式的方式: 直接使用re模块中的函数 import re re_string = "{{(.*?)}}" s ...

  10. go语言解析 map[string]interface{} 数据格式

    原文:https://blog.csdn.net/Nick_666/article/details/79801914 map记得分配内存 解析出来的int类型会变成float64类型 注意判断不为ni ...