Python日期验证Bug修复:未拒绝无逗号的月份全称格式输入
修复日期格式验证程序的逗号检查问题
问题核心:当前程序允许输入September 8 1636(日与年之间无逗号)这类不符合要求的格式,误将其判定为有效日期并完成转换。原因是处理英文月份格式时,仅通过day.strip(",")去除逗号,却未验证逗号是否存在。
修复方案:在处理英文月份格式的分支中,增加对day字段末尾逗号的检查,确保只有带逗号的格式才进入后续日期有效性验证流程。
修改后的完整代码:
months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ] while True: user_input = input("Date: ") parts = user_input.split("/") if len(parts) == 3: month, day, year = parts try: month = int(month) day = int(day) year = int(year) if 1 <= month <= 12 and 1 <= day <= 31: break except ValueError: pass else: parts = user_input.split() if len(parts) == 3: month_name, day, year = parts try: # 检查day是否以逗号结尾,确保格式符合要求 if not day.endswith(","): raise ValueError("Missing comma after day") month = months.index(month_name) + 1 day = int(day.strip(",")) year = int(year) if 1 <= month <= 12 and 1 <= day <= 31: break except (ValueError, IndexError): pass print("Invalid date format. Please try again.") print(f"{year}-{month:02}-{day:02}")
修改说明:
- 在处理英文月份的
try块中,新增if not day.endswith(","): raise ValueError(...)语句,强制校验日字段末尾的逗号 - 若逗号不存在,直接触发异常进入
except块,程序会输出格式错误提示并重新等待输入
内容的提问来源于stack exchange,提问作者Ritam Debnath
相关产品推荐
相关产品推荐

