用python3跑python2代码遇见的一些小坑

1 print函数

最常见的是Python2中print 函数后接单引号 ,

print ‘Hello World’

而python3中接括号

print(‘Hello World’)

2 split函数

作字符串分割时,如果分割依据是一个字符,则需要转为byte码,即将

split(‘:’, 1)

改为:

split(':'.encode(),1)

3 map映射的返回值

在python3中,map映射的返回值是 map object,所以要使用具体返回的数据还需要转换,比如我的程序中,读取到一个list,我需要的是list里面的数据,但这个list里的数据以str的形式存储,所以用map映射方便地批量转成float浮点数形式:

map(float,strlist)

但是这个map的返回值是map objective,而不是一个装了浮点数的list,所以要加一步

list(map(float,strlist))

4 reshape  和 ValueError: cannot reshape array of size 1 into shape (3,3)

不确定这个是不是python3的改动,因为调bug的时候一起调了就写在这里。

如果出现这个问题,有一个可能是你要reshape的那个对象不存在。调bug的时候可以考虑一下。

还有list是没有reshape方法的,要先转换成array,即

np.array(alist).reshape(3,3)

当时为了读取一个参数文件,参数文件格式是

R: 7.533745e-03 -9.999714e-01 -6.166020e-04 1.480249e-02 7.280733e-04 -9.998902e-01 9.998621e-01 7.523790e-03 1.480755e-02

并把读取到的9个数据整理成矩阵,把别人的Python2代码最后改成了

np.array(list(map(float,velo['R'.encode()].decode().split(' ')))).reshape(3,3)

其中split(' ')的作用是把读到的9个数据按空格分割,整理成一个数据用str形式存储的list,所以后面才会用到map转回浮点数,然后因为3提到的原因需要再转回list,再由于4的原因要加一层数组转换np.array。

5 AttributeError: 'Counter' object has no attribute 'iteritems'

这个原因是python3中不再用到iteritems这个属性,改成 items()即可。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值