如何实现从当前时间逐次减10分钟输出到2021年7月1日并修复报错
报错根因
你的代码触发停止条件时,函数before_10minute_time返回了整数0,下一轮循环会把这个0作为current_time传入函数,执行current_time - datetime.timedelta(minutes=10)时,就会出现「int类型和datetime.timedelta类型不能做减法」的类型错误。
另外你现有逻辑还有两处问题:
- 用字符串匹配判断停止的方式效率低,且容易因为格式问题出现判断失误
- 执行顺序逻辑有误:你先打印了减10分钟后的时间,再判断是否要停止,就算判断逻辑正确,也会多打印一条不符合要求的时间,你当前的代码就是判断逻辑未生效,才会让时间一直输出到2021年1月。
修正后的代码
import datetime # 直接定义停止阈值的datetime对象,比较更准确高效 STOP_TIME = datetime.datetime(2021, 7, 1) def before_10minute_time(current_time): current_time_minute10 = current_time - datetime.timedelta(minutes=10) # 先判断减完的时间是否早于停止阈值,早于就返回None标识需要终止 if current_time_minute10 < STOP_TIME: return None # 符合要求再打印结果 print("当前时间减去10分钟的结果:" + current_time_minute10.strftime('%Y%m%d%H%M%S')) return current_time_minute10 if __name__ == "__main__": current_time = datetime.datetime.today() while True: current_time = before_10minute_time(current_time) # 收到停止标识直接终止循环 if current_time is None: break
逻辑说明
- 直接用datetime对象做大小比较,不需要转字符串处理,不会出现格式匹配错误,判断效率更高
- 先校验减10分钟后的时间是否符合要求,不符合就直接终止,不会打印不符合要求的时间
- 全程不会出现类型不匹配的问题,所有传入函数的
current_time都是datetime类型,收到None就直接终止循环,不会触发运算错误。
内容的提问来源于stack exchange,提问作者elk_basic
相关产品推荐
相关产品推荐

