这是我参与更文挑战的第5天,活动详情查看: 更文挑战
「本文已参与 周末学习计划,点击查看详情 」
BUG背景
日前在开发一个公共服务接口,遇到一个比较奇异事件,特记录下来:
“同一个参数,同一个空格,却是不同返回值”
>>> me = 'a b'
>>> user = 'a b'
>>>
复制代码
自测顺利返回数据;第三方调用却提示没有相关数据。
思考
- 难道调用的姿势不对? 请求方法、参数条件都满足,PASS
- 难道调用到其他开发环境接口?Nginx转发、服务环境都正确,PASS
- 难道代码版本不同?git log查看,commit id一样,PASS
- 本着计算机在其他条件恒定情况下相同输入总会得到相同输出的思想。
- 难道输入不一样?
- 但它们看起来没有不同。
甄别
首先进行字符串比较
>>> me = 'a b'
>>> user = 'a b'
>>> me == user
False
复制代码
字符串比对代码截图:
从字符串比较结果来看,它们只是看起来一样而已。
那么就进行字符比较,找出不同的字符
Python中对字符的甄别提供了一个很好的ord(“char”)函数(返回字符对应的字符序):
>>> ord('a')
97
>>> me = 'a b'
>>> user = 'a b'
>>> me == user
False
>>> [ord(char) for char in me]
[97, 32, 98]
>>> [ord(char) for char in user]
[97, 160, 98]
复制代码
从中发现,自测使用的空格和第三方使用的空格的Unicode编码是不一样。
从而明白为什么“相同的字符串”传递给同一个接口得到的结果却截然不同。
总结
- 有时候不能相信肉眼判断
- 字符串的判断还是交给程序去判断
- 坚信自己的思想:同样的输入就意味着同样的输出
- 其实,空格存在许多种,它们长得差不多,但是字符序却不一样哦,具体自己去搜索了解吧
- 学海无涯,RidingRoad Always on the Road
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END