别以为用2to3.py将python2程序转换成python3程序百无一失!网友:长见识了!

2019-12-19更新

又发现一个bug,因为python2和python3中的/也有区别,如果除数和被除数都是int型,python2中/的结果会取整,python3中/的结果则是float型,//的结果才会取整。也要注意一下子哟~

问题背景

笔者在做OSTEP的作业时,下载的源码是python2的,由于笔者windows环境下只装了python3,故每次都是利用python安装目录Tools/scripts中的2to3.py工具将python2程序转换成python3程序,此前几次该操作贼稳,没想到今天翻车了,debug一番发现了错误在此记录下来。

问题回顾

使用2to3.py

在这里插入图片描述
记得加-w参数,不然只是将要改的地方输出在屏幕上。
执行该命令后,原来的python2程序就转换成了python3程序。

运行转换后的x86.py

在这里插入图片描述
在这里插入图片描述
不成想翻车了,报了UnboundLocalError的错误。

在pycharm中添加命令行参数

为了调试方便,决定在pycharm中debug。此前也没用过在pycharm中添加命令行参数。
这样操作:
Run -> EditConfigurations
在Configuration中的Parameters栏加入命令行参数即可。
在这里插入图片描述
运行后当然一样的报错:
在这里插入图片描述

问题解决

根据提示,跳转到895行看看转换后的程序和转换前的程序有什么区别:
转换后:
在这里插入图片描述
转换前:
在这里插入图片描述
将next(procs)改成procs.next()
无奈还是报错:
在这里插入图片描述
赶快去看下prolist中的next方法!
转换后:
在这里插入图片描述
转换前:
在这里插入图片描述
注意到转换后的next方法前后加了双下划线。为什么其他函数转换时没有加上前后双下划线呢,应该与next方法是python的内置函数有关。
故再将__next__改成next后问题解决。
在这里插入图片描述

问题总结

不要以为2to3.py将python2程序转换成python3程序万无一失。
方法命名最好不要和内置函数什么的撞名了吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值