谨记录运行环境改变过程中所碰到的坑。

下载底层运行环境由Python2移至Python3所遇到的问题及处理方法:

1、所引的第三方组件,基本都有替代支持;msvcr90.dll不再需要,有则报错
2、引用当前目录下文件,前面要加.。Python2是首先搜索当前目录的
3、全面支持unicode字符,str不再有docode()方法,unicode()弃用。字串分为str与bytes两类,对应unicode与ascii,转换:

#bytes object
byte = b"byte example" # str object
str = "str example" # str to bytes 字符串转字节
bytes(str, encoding="utf8") # bytes to str 字节转字符串
str(bytes, encoding="utf-8") # an alternative method
# str to bytes 字符串转为字节
str.encode(str) # bytes to str 字节转为字符串
bytes.decode(bytes) # 所有Python2需要做字符集转换的,不再需要,去除。
import sys
if sys.getdefaultencoding() == 'ascii':
reload(sys)
sys.setdefaultencoding('utf-8')

4、通用的,Python3不支持print语句,只能用print函数。exec语句改为exec函数
5、字典类,其keys()、values()不再是list而返回迭代器,不能以key[0]做索引调用,去除了has_key()判断,全改为in操作符。iteritems弃用,而用items
6、同样,range()不再是列表是迭代器,而xrange弃用。列表须以list转
6、filter()返回迭代对象而非list,其不能再用sort()方法。同样还有map()
7、cookielib->http.cookiejar,urllib2->urllib.request,_winreg->winreg,HTMLParser为html代替
8、异常:弃用Exception, ex写法,改为Exception as ex。触发异常不能用Exception xxx,改为Exceptoin(xxx)
9、延时处理:threading._sleep(10)替换为time.sleep(10)
10、不等号<>弃用,全用!=;弃用long,全用int;整数除法可返回浮点数了
11、win_subprocess去除,结果待验证
12、execjs执行结果不对
13、regex替换,can't use a string pattern on a bytes-like object,被替换字串做utf-8解码。将urlopen().read().decode(’utf-8‘)以做转码。
14、函数中的exec代码动态执行问题:Python2中,exec code即可返回可用的全局对象,在Python3中,它需加globals()限定。

# python2
s = 'x = 12'
def f():
exec s
print x f() # output 12 # python3
def f():
exec(s, globals(), globals())
print(x) f() # output 12

15、回调函数设置问题。因api改变,而相关资料又少,这个坑,坑我太很:

    def set_callback(self, c_callback):
# 3.0,api改了
if sys.version_info >= (3, 0):
PyCapsule_GetPointer = PYFUNCTYPE(c_void_p, py_object)(('PyCapsule_GetPointer', pythonapi))
PyCapsule_GetName = PYFUNCTYPE(c_void_p, py_object)(('PyCapsule_GetName', pythonapi))
c_callbackaddr = PyCapsule_GetPointer(c_callback, PyCapsule_GetName(c_callback))
else:
PyCObject_AsVoidPtr = PYFUNCTYPE(c_void_p, py_object)(('PyCObject_AsVoidPtr', pythonapi))
c_callbackaddr = PyCObject_AsVoidPtr(c_callback) CALLBACKFUNC_T = CFUNCTYPE(c_long, c_char_p, c_long)
self.callback = CALLBACKFUNC_T(c_callbackaddr)

参考资料:

python2与python3的区别总结 - 简书

Python2.x与3​​.x版本区别 | 菜鸟教程

Python 2.7.x 和 Python 3.x 的主要区别 - yexiaoxiaobai - SegmentFault 思否

Using a function defined in an exec'ed string in Python 3 - Stack Overflow

python - Python3-Issue with calling exec(open().read()) inside a function - Stack Overflow

Python: 下载底层由Python2转Python3环境更新手记的更多相关文章

  1. ubuntu16.04下python2、python3环境选择与python升级(pip版本切换)

    参考链接:https://www.jianshu.com/p/63c1f22e1fed Ubuntu中python版本问题: 添加PPA: sudo add-apt-repository ppa:jo ...

  2. Anaconda快捷搭建Python2和Python3环境

    我们在使用Pycharm编辑Python程序经常会因为不熟悉Python2和Python3的一些代码区别而导致错误,我们知道他们之间很多代码是必须运行在对应版本中的,否则是会报错的.因此,本文介绍一个 ...

  3. Flawfinder在Python2和Python3环境下对代码进行扫描方法

    1. Flawfinder Flawfinder是一款开源的关于C/C++静态扫描分析工具,其根据内部字典数据库进行静态搜索,匹配简单的缺陷与漏洞. 官网:https://dwheeler.com/f ...

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

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

  5. [python]ubuntu下的python2和python3

    在终端分别输入python,python2,python3python和python2默认都是python2python3才是python3 Ubuntu下是默认没有pip的,需要自己手动安装 sud ...

  6. [Python] 同时安装了python2和python3时,pip命令该如何使用?

    当python2和python3同时安装windows上时,它们对应的pip都叫pip.exe,所以不能够直接使用 pip install 命令来安装软件包. 而是要使用启动器py.exe来指定pip ...

  7. CentOS 7安装Python3.6过程(让linux系统共存Python2和Python3环境)

    CentOS 7系统自带了python2,不过可以不用2版本,直接使用python3运行python脚本就可以,但是千万别去动系统自带的python2,因为有程序依赖目前的python2环境,比如yu ...

  8. [转]CentOS 7安装Python3.6过程(让linux系统共存Python2和Python3环境)

    CentOS 7系统自带了python2,不过可以不用2版本,直接使用python3运行python脚本就可以,但是千万别去动系统自带的python2,因为有程序依赖目前的python2环境,比如yu ...

  9. 同时安装python2和python3环境

    一.同时安装两个环境 https://www.cnblogs.com/zhengyihan1216/p/6011640.html 二.快速安装django: https://blog.csdn.net ...

随机推荐

  1. hnsdfz -- 6.19 -- day4

    感觉还好…… 暴力分挂了很多不知道为什么…… 听说今天出题人hsh很劲…… c题正解是个奇怪的知识点…… 恩总的来说今天的节奏依旧很散(大课间去围观sdfz跑操了233 暴力分都写了但是似乎没有尝试脑 ...

  2. 第1章 Java语言概述--HelloWorld--环境搭建

    SE学什么 第1章 Java语言概述 第2章 基本语法 第3章 数组 第4章 面向对象编程(上) 第5章 面向对象编程(中) 第6章 面向对象编程(下) 第7章 异常处理 第8章 枚举类&注解 ...

  3. 我发起了一个 网格计算 协议 开源项目 GridP

    GridP  是   Grid Protocol   的 全称  . 我在 <关于软件产业的两个契机>  https://www.cnblogs.com/KSongKing/p/95319 ...

  4. sedsed 一个更好理解sed执行过程的工具

    官网:http://aurelio.net/projects/sedsed/    这个上面好多学习的资料 嘿嘿 留着慢慢看 昨晚在看sed的具体执行过程,看到有hold space,pattern ...

  5. ROS下利用realsense采集RGBD图像合成点云

    摘要:在ROS kinetic下,利用realsense D435深度相机采集校准的RGBD图片,合成点云,在rviz中查看点云,最后保存成pcd文件. 一. 各种bug 代码编译成功后,打开rviz ...

  6. Python NLP完整项目实战教程(1)

    一.前言 打算写一个系列的关于自然语言处理技术的文章<Python NLP完整项目实战>,本文算是系列文章的起始篇,为了能够有效集合实际应用场景,避免为了学习而学习,考虑结合一个具体的项目 ...

  7. sql server 数据库变成单用户模式的恢复

    USE master;GODECLARE @SQL VARCHAR(MAX);SET @SQL=''SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID)FROM master. ...

  8. (转)EF5+SQLserver2012迁移到EF6+mysql5.5.47

    原文地址:https://www.cnblogs.com/tinyjian/p/6235014.html:https://www.cnblogs.com/tinyjian/p/6235397.html ...

  9. 24种java设计模式总结和目录

    https://blog.csdn.net/qq_40369829/article/details/80374131 简介原则分类创建型模式结构型模式行为型模式类图参考简介设计模式是在特定环境下,为解 ...

  10. Python第2天

    今天学习的主要内容: pycharm专业版的安装和注册,采用注册码的方式注册. 运算符,+ — * / // % < > <=  >= != <> . 基本数据类型 ...