一个bug引发的问题-python字符串比较大小

一、问题:项目遇到一个根据当前日期比较授权日期判断业务是否过期或者正常的需求,很简单的操作,拿当前日志跟授权日期比较,授权日期大于等于当前日期:正常;授权日期小于当前日期:过期;但是前段显示出现了问题。
二、排查:发现两个日期都是字符串并且格式还不一样(这个粗心哦)
在这里插入图片描述
bug修改前后是这样的:在这里插入图片描述
其实很简单,但是问题来了,"2020/07/08""2020-11-25"前者日期大于后者,但是判断确是"2020/07/08"大,两个字符串是怎样的比较的呢,这点可能好多人特别是初学者都会忽略掉。
三、分析:
理解原理和相关知识
1.字符串按位比较,两个字符串第一位字符的ascii码谁大,字符串就大,不再比较后面的;第一个字符相同就比第二个字符串,以此类推,需要注意的是空格的ascii码是32,空(null)的ascii码是0。
2.ord 函数接受一个字符Python ord() 函数

print(max(['1', '2', '3']))    # 3
print(max(['41', '1', '19']))  # 41
print(max(['11', '34', '5']))  # 5

print(ord('3'))  # 51
print(ord('4'))  # 52
print(ord('5'))  # 53

打印:

PS E:\pyproject\demo01> python -u "e:\pyproject\demo01\venv\text01.py"
3
41
5
51
52
53

我们看到实际比较的是第一个字符的ascii码,谁大谁的字串就大
3.项目中出现的问题测试代码:

print(ord("/"))
print(ord("-"))
a = "2020/07/08"  # 2020 /
b = "2020-11-25"  # 2020 -

if a > b:
    print('111')
elif a < b:
    print('222')
else:
    print('333') 

打印:

PS E:\pyproject\demo01> python -u "e:\pyproject\demo01\venv\text01.py"
47
45
111

这下清楚了吧,a和b前面都是2020都一样,比较次序是2 0 2 0,发现都一样继续往后走,此时/的ascii码是47,而-的ascii码是45此时比较停止,a>b这就是我们项目里面的bug:"2020-11-25"<"2020/07/08"的原因。当然,如果日期格式不错也不会引起这个问题,还是写代码太粗心。
友情链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值