收集python2代码转python3遇到的问题
在程序中做python版本判断
sys.version_info
# sys.version_info(major=2, minor=7, micro=16, releaselevel='final', serial=0)
sys.version_info.major
# 2
代码示例:
- import sys
- if sys.version_info.major == 2:
- reload(sys)
- sys.setdefaultencoding('utf-8')
- if sys.version_info.major == 2:
- a = raw_input("请输入:\n>>")
- else:
- a = input("请输入:\n>>")
如果兼容过程出现“中文字符在cmd窗口乱码”,建议更改cmd的编码方式为unicode:
右击cmd窗口,点默认值。
在选项中默认代码页,选择936。
链接:https://www.cnblogs.com/sunshuhai/p/6242275.html
需要把一段py2的代码转为py3,执行后,遇到一个错误就解决一个错误,一般都会有替换方案。
楼主遇到的如下:
“print X” 更改为“print(X)”
否则报错:SyntaxError: Missing parentheses in call to 'print'。
xrange改为range
python3 中取消了 range 函数,而把 xrange 函数重命名为 range,所以现在直接用 range 函数即可。
m.itervalues() 改为 m.values()
否则报错:AttributeError: 'collections.defaultdict' object has no attribute 'itervalues'
import cv报错
- OpenCV是基于C/C++的,”cv”和”cv2”表示的是底层C API和C++API的区别,”cv2”表示使用的是C++API。
- python-3.0以后得版本就没有cv了,直接在cv2里可以调用cv的功能,可以试试:
- import cv2
- import cv2 as cv
- 然后要把所有cv的函数替换为cv2的函数,如:
- cv.LoadImage --》cv2.imread
- cv.SaveImage --》cv2.imwrite
文件'rb'方式打开报错
原始代码:with open('a.csv', 'rb') as csvfile。
报错:_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
原因:因为此csv文件并非二进制文件, 只是一个文本文件。
使用’rb’按照二进制位进行读取的,不会将读取的字节转换成字符;rt模式下,python在读取文本时会自动把\r\n转换成\n;
解决:改成以'rt'方式打开。
报错:AttributeError: module 'string' has no attribute 'atoi'
解决:v_i = string.atoi(s) 改为 v_i = int(s)
报错:TypeError: 'dict_keys' object does not support indexing
解决:将dict_keys()类型转化为list
visit_sequence = self._G.keys(); random.shuffle(visit_sequence) 改为 visit_sequence = list(self._G.keys()); random.shuffle(visit_sequence)
报错: csv.write()中str转成bytes类型后用csv.writerow()写入csv文件仍然出错
根本原因是Python版本问题python2.x中要求用‘wb’,python3.x中要求用'w'
报错:Python map object is not subscriptable(map对象不可用下标索引)
解决方案:
In Python 3, map returns an iterable object of type map, and not a subscriptible list, which would allow you to write map[i]. To force a list result, write
payIntList = list(map(int,payList))
However, in many cases, you can write out your code way nicer by not using indices. For example, with list comprehensions:
payIntList = [pi + 1000 for pi in payList]
for pi in payIntList:
print(pi)
报错:TypeError: 'dict_keys' object is not subscriptable
解决:self._G.node.keys()[:] 改为 list(self._G.node.keys())
在Python 3+中,__builtin__模块被命名为builtins
Python3中的reload需要从imp中导入,sys.setdefaultencoding被删除
python2.7:
reload(sys)
sys.setdefaultencoding('utf-8')
python3:
from imp import reload
reload(sys)
sys.setdefaultencoding('utf-8')被删除,会报错
报错:ValueError: can't have unbuffered text I/O
报错代码为:
fd = open(txt_file, "a+", buffering=0)
”不能有未缓冲的文本“原因是:缓冲是一个可选的整数,用于设置缓冲策略。通过0关闭缓冲(仅允许在二进制模式下)
报错更正方式为:
fd = open(WORDLIST_FILENAME, 'r'),或
fd = open(WORDLIST_FILENAME, 'rb', 0)
- python2.7:
- reload(sys)
- sys.setdefaultencoding('utf-8')
- python3:
- from imp import reload
- reload(sys)
- sys.setdefaultencoding('utf-8')被删除,会报错
报错:ValueError: can't have unbuffered text I/O
报错代码为:
fd = open(txt_file, "a+", buffering=0)
”不能有未缓冲的文本“原因是:缓冲是一个可选的整数,用于设置缓冲策略。通过0关闭缓冲(仅允许在二进制模式下)
报错更正方式为:
fd = open(WORDLIST_FILENAME, 'r'),或
fd = open(WORDLIST_FILENAME, 'rb', 0)
收集python2代码转python3遇到的问题的更多相关文章
- 将python2代码转为python3
将python2代码转为python3 1.2to3在anaconda的/bin文件夹下: 2.打印帮助信息 2to3 --help 3.使用2to3 -W [要转换的python2文件目录] 4.转 ...
- python 内置2to3工具将python2代码转换为python3代码
python2与python3代码不兼容,如果需要python2代码在python3环境下运行,需要将代码进行转换,本文介绍使用python3内置工具2to3.py对代码进行转换 一:2to3.py在 ...
- python2代码批量转为python3代码
由于python存在python2和python3两个主要的版本方向,经常会有将python2的代码转到python3的环境下运行的需求.尤其是跑一些神经网络的代码时有很多是在python2的环境下写 ...
- 如何把Python2的代码转换为Python3的代码
如何把Python2的代码转换为Python3的代码 注: 如果对于python2和python3不熟悉的,可以参考: [整理]总结Python2(Python 2.x版本)和Python3(Pyth ...
- 使用Python3自带工具2to3.py 转换 Python2.x 代码 到Python3
几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为了简化这个转换过程,Python 3自带了一个叫做2to3的实用脚本(Utility Script),这个脚本会 ...
- 一键将 Python2 代码自动转化为 Python3
问题 Python2 的代码直接在 Python3 环境运行的话会报错误: 如果大量的代码,无论是批量替换,还是逐行修改都够累的,这活儿表示不能干! 有没有办法一键转换呢? 百度了一下发现网上的方法如 ...
- 用Python写一个将Python2代码转换成Python3代码的批处理工具
之前写过一篇如何在windows操作系统上给.py文件添加一个快速处理的右键功能的文章:<一键将Python2代码自动转化为Python3>,作用就是为了将Python2的文件升级转换成P ...
- 自动发布工具版本从python2升级成python3后遇到的种种问题(涉及paramiko,Crypto,zipfile等等)
从在公司实习到正式入职,一直还在被同事使用的是我写的一个自动发布工具.该工具的主要功能是:开发人员给出需要更新的代码包(zip格式),测试人员将该代码包部署到测服,这些代码包和JIRA数据库里的项目信 ...
- 相比于python2.6,python3.0的新特性。
这篇文章主要介绍了相比于python2.6,python3.0的新特性.更详细的介绍请参见python3.0的文档. Common Stumbling Blocks 本段简单的列出容易使人出错的变动. ...
随机推荐
- Java 设计模式-【单例模式】
单例解决了什么问题:为了节约系统资源,有时需要确保系统中某个类只有唯一一个实例,当这个唯一实例创建成功之后,我们无法再创建一个同类型的其他对象,所有的操作都只能基于这个唯一实例.为了确保对象的唯一性, ...
- svn服务端安装、迁移教程、Eclipse切换svn连接库
svn服务端安装.迁移教程.Eclipse切换svn连接库 安装教程 1.下载svn服务端安装程序 2.运行程序,安装 这里端口号根据自己定义,避免与其他程序冲突 到这里就安装完成 迁移教程 这里举例 ...
- Mysql忘记密码:关于ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)的问题
命令行登录mysql时,出现ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)的提示. ...
- 「SCOI2016」背单词
「SCOI2016」背单词 Lweb 面对如山的英语单词,陷入了深深的沉思,「我怎么样才能快点学完,然后去玩三国杀呢?」.这时候睿智的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,然后 ...
- [CSP-S模拟测试]:简单的区间(分治)
题目描述 给定一个长度为$n$的序列$a$以及常数$k$,序列从$1$开始编号.记$$f(l,t)=\sum \limits_{i=l}^ra_i-\max \limits_{i=l}^r\{a_i\ ...
- 20175213 2018-2019-2 《Java程序设计》第10周学习总结
Java内存模型 主内存与工作内存 Java内存模型主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.此处的变量(Variable)与Java编程中 ...
- WebX.0:Web1.0
ylbtech-WebX.0:Web1.0 web1.0时代是一个群雄并起,逐鹿网络的时代,虽然各个网站采用的手段和方法不同,但第一代互联网有诸多共同的特征,表现在技术创新主导模式.基于点击流量的盈利 ...
- 用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览
#目录 前文列表 扩展阅读 Jinja 变量名 注释 控制语句 if 语句 循环 过滤器 无参数调用 带参数调用 宏 定义宏 调用宏 结果 兼容 JavaScript 前文列表 用 Flask 来写个 ...
- Polysh实现多服务器批量执行shell
安装 wget wget http://guichaz.free.fr/polysh/files/polysh-0.4.tar.gz tar -zxvf polysh-0.4.tar.gz cd po ...
- Eclipse转idea改设置
1 自动导包:画圈的打钩,实现自动导包,去除无用包.导入的类名相同时需要自己手动导包-> alt+enter. 2:修改快捷键 左移光标,右移同理. 上移光标:下移同理 光标移至行首,行末为e ...