python2转python3问题记录

利用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函数进行排序

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值