Python输入日期格式校验及与当前日期年份对比问题求助
Python日期输入校验问题解决
核心问题原因
- 你原来的格式校验逻辑错误:
while BD != "%d/%m/%Y"是直接将用户输入的日期内容和格式模板字符串做等值判断,二者永远不可能相等,所以循环不会终止 - 年份比较为字符串比较,且后续重新输入日期后没有重新解析年份,存在逻辑漏洞
最简实现代码
直接用datetime.strptime的异常捕获做格式校验,同时统一处理两个限制条件:
from datetime import datetime # 直接获取当前年份数值,无需手动拆分字符串 current_year = datetime.today().year while True: BD = input("Enter your date of birth (format: DD/MM/YYYY): ") try: # 尝试按指定格式解析日期,格式错误会直接抛出异常进入except分支 birth_date = datetime.strptime(BD, "%d/%m/%Y") # 校验年份小于当前年份 if birth_date.year < current_year: # 两个条件都满足,跳出校验循环 break else: print("Birthday year must be less than current year") except ValueError: print("Error: date format must be DD/MM/YYYY") # 校验通过后birth_date是已解析的日期对象,可直接调用属性取年月日 print(f"Valid birth date: {birth_date.strftime('%d/%m/%Y')}")
逻辑说明
- 用
try-except捕获datetime.strptime的异常,自动完成格式校验,不需要手动判断格式或者做类型转换,避免了斜杠导致的int转换报错问题 - 直接通过
datetime对象的year属性做年份数值比较,省去手动拆分字符串、转换类型的冗余操作 - 所有输入校验逻辑都放在同一个循环里,避免重复写输入代码,逻辑更简洁
内容的提问来源于stack exchange,提问作者Attila Antal
相关产品推荐
相关产品推荐

