Python中如何在多日期格式匹配时仅输出人类可读时间转epoch的有效结果
问题根源
你现有代码会重复输出多次invalid input,核心是把错误提示的输出逻辑放在了循环内部的异常分支里——每尝试一个不匹配的日期格式,就会触发一次错误打印。
调整方案
只需调整输出逻辑的位置,就能实现预期效果:
- 遍历格式列表时,遇到单个格式匹配失败的情况,不做任何打印,直接跳过尝试下一个格式
- 新增变量存储匹配成功的epoch值,等所有格式遍历完成后再统一判断输出:
- 存在有效匹配结果时,直接打印对应的epoch值
- 全部格式都匹配失败时,仅打印一次
invalid input
调整后可直接运行的代码
import time text = '12.12.2020' # 规避和Python内置format函数重名,使用更语义化的变量名 date_formats = [ '%d/%m/%Y', '%m/%d/%Y', '%d-%m-%Y', '%m-%d-%Y', '%d.%m.%Y', '%m.%d.%Y', '%d%m%Y', '%m%d%Y' ] matched_epoch = None for fmt in date_formats: try: matched_epoch = int(time.mktime(time.strptime(text, fmt))) break # 匹配成功立刻跳出循环,无需继续尝试剩余格式 except ValueError: # 单个格式匹配失败,静默跳过 continue # 遍历完成后统一输出 if matched_epoch is not None: print(matched_epoch) else: print('invalid input')
运行效果
针对text = '12.12.2020'的测试用例,前4个格式尝试失败时无任何输出,直到命中列表中第5个格式规则计算出epoch值后直接跳出循环,最终仅输出1次正确的epoch结果。如果输入内容完全不命中所有给定格式,循环跑完后会仅输出1次invalid input,不会出现重复打印错误提示的问题。
内容的提问来源于stack exchange,提问作者S. ARAVIND
相关产品推荐
相关产品推荐

