博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python2 和 python3兼容写法
阅读量:4504 次
发布时间:2019-06-08

本文共 2488 字,大约阅读时间需要 8 分钟。

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

# -*- coding: utf-8 -*- try:    # Python3    from configparser import ConfigParserexcept ImportError:    # Python2    from ConfigParser import ConfigParser config = ConfigParser() # do something

urllib库也是不兼容Python2和Python3的

# -*- coding: utf-8 -*- try:    # Python2    from urllib import urlencode      from urllib import quote    from urlparse import urlparse    import urllib2 as requestexcept 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-8 -*-import sys if sys.version_info.major == 2:    # Python2    from urllib import urlencode    from urllib import quote    from urlparse import urlparse    import urllib2 as requestelse:    # 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

转载于:https://www.cnblogs.com/shengulong/p/10176903.html

你可能感兴趣的文章
FileReader详解与实例---读取并显示图像文件
查看>>
paste DEMO合并文件
查看>>
DOS下如何同时显示时区日期和时间
查看>>
使用slf4j的时候,部署后,只有tomcat控制台有日志,没有每日日志,后台报错ROLLINGFILE...
查看>>
【HNOI2008】玩具装箱
查看>>
GCD Operation 等线程知识点 在IOS Developer Library 中的位置
查看>>
1284 2 3 5 7的倍数 分类: 51nod ...
查看>>
r函数知识总结
查看>>
dds数字信号发生器
查看>>
Java简介(1)
查看>>
ui-router 1.0 003 lazyloading
查看>>
Lua编程
查看>>
程序中堆和栈的区别
查看>>
imx6 lvds 代码分析
查看>>
通过代码创建联系人
查看>>
大数智能未来
查看>>
jQuery插件实现网页底部自动加载-类似新浪微博
查看>>
学生空间bug report
查看>>
shanchushanchu
查看>>
linux下使用autoconf制作Makefile
查看>>