You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:55:22