文章信息
作者:史晨 Charles Shih
创建时间:2018年08月24日
问题描述
我之前写过一个测试脚本,解释器用的是Python2.7,在RHEL7上用起来是没有问题的。但是最近要在RHEL8上进行这个测试,RHEL8采用的Python解释器是Python3,因此我的脚本不能直接运行在RHEL8上。
现在的现实情况如下:
1. RHEL7默认只安装了Python2的解释器;
2. RHEL8默认只安装了Python3的解释器;
3. 脚本需要同时兼容Python2和Python3解释器,因为没必要维护两份代码;
4. 测试框架尽量保持简洁,尽量少改动被测试系统的软件部署,因此不会为RHEL7安装Python3也不会为RHEL8安装Python2;
出问题的语句最开始是:
if not isinstance(params['backend'], (unicode, str)):
经过2to3
(官方的代码升级工具)转换后变成了:
if not isinstance(params['backend'], str):
这是因为Python3当中没有Unicode这种类型。因此,如果2to3
不把unicode
优化掉的话,代码在Python3中就会直接报错。
但是经过转换的语句在Python2.7解释器下,当params['backend']
为Unicode时,就会出现误判ÿ