利用python3的2to3.py脚本对python2代码转python3后会有一些不兼容的问题,这里作一个记录
1、MySQLdb问题
python2中有MySQLdb这个库,但是python3中是没有这个的,python3中的mysqlclient可以完全替换这个
2、sys.setencoding
python2中为了解决编码问题,可能使用这个设置编码,python3中不需要了,所以代码转python3后需要将这个去掉
3、json.dumps
py2中这个怎么用都好,只要里面是个字典,py3中不行了,如果字典包含bytes,就无法成功
TypeError: Object of type bytes is not JSON serializable
解决这个问题在于在dumps时候,把byte转为str
将data = json.dumps(data)
转换为data = json.dumps(data,cls=MyEncoder,indent=4)
MyEncoder是一个类
代码如下
def default(self, obj):
if isinstance(obj, bytes):
return str(obj, encoding='utf-8')
return json.JSONEncoder.default(self, obj)
4、“TypeError:abytes-likeobjectisrequired,not‘str’”
这种错误也是byte和str的锅,转换一下就好
一般来说,编码问题可以用
str.decode#转bytes
bytes.encode("utf-8")转str
更简单的是直接
str(bytes)
5、cmp
这个函数在py3中不用了,用到的需要重写
6、sorted
py2下如果list含有None元素,使用sorted是可以排序的,None会在最前面,但是在py3下,如果list含有None元素,将无法直接使用sorted函数,会报错,所以在py3环境下,如果使用sorted函数,最好先将list中的None元素剔除
对于字典类型,也是如此,字典的key如果包含None,无法直接使用sorted函数进行排序