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

Python日期转换代码check50测试不通过,请求错误排查

Python日期转换代码错误排查与修正

问题对应错误分析

1. MM/DD/YYYY格式输出日期月份颠倒

代码处理斜杠分隔的日期时,错误将分割结果按day, month, year赋值,而输入格式为MM/DD/YYYY,正确顺序应为month, day, year。这直接导致月份和日期位置颠倒,输出不符合预期。

2. 带前后空格的输入处理异常

未对原始输入做去空格处理,当输入包含前后空格时,分割后的字符串会残留空格(如' 9'或'1636 '),最终输出的日期格式会出现多余空格,不符合YYYY-MM-DD规范。

3. 无效输入未被正确拦截

  • 23/6/1912未被拒绝:因分割顺序错误,代码将23识别为日期、6识别为月份,均满足范围判断条件,导致无效输入被放行。修正顺序后,23会被识别为月份,超出1-12范围,会被正确拦截。
  • September 8 1636未被拒绝:该输入无逗号,不满足elif "," in date的条件,不会进入英文月份处理分支;后续执行范围判断时,month和day变量未定义,会抛出NameError,但代码仅捕获ValueError,导致程序崩溃而非重新提示。此外,代码未对英文月份格式做严格校验(必须包含逗号)。

额外隐藏问题

处理英文月份格式时,date.split(",")得到的year会带有前导空格(如输入September 8, 1636,year为' 1636'),直接输出会导致年份格式错误,需要对year做去空格处理。


修正后的代码

month_dict = {
    "January": 1,
    "February": 2,
    "March": 3,
    "April": 4,
    "May": 5,
    "June": 6,
    "July": 7,
    "August": 8,
    "September": 9,
    "October": 10,
    "November": 11,
    "December": 12
}

while True:
    date = input("Date: ").strip()  # 去除前后空格
    try:
        month = day = year = None  # 初始化变量,避免未定义报错
        if "/" in date:
            # 修正MM/DD/YYYY的分割顺序
            month, day, year = date.split("/")
            # 转换为整数,提前校验是否为有效数字
            month = int(month)
            day = int(day)
            year = int(year)
        elif "," in date:
            month_day, year = date.split(",")
            year = year.strip()  # 去除年份前的空格
            # 拆分月份和日期,确保格式为"Month DD"
            parts = month_day.strip().split()
            if len(parts) != 2:
                raise ValueError
            month_str, day = parts
            if month_str not in month_dict:
                raise ValueError
            month = month_dict[month_str]
            day = int(day)
            year = int(year)
        else:
            # 既无斜杠也无逗号,直接抛出错误
            raise ValueError
        
        # 校验月份和日期的有效性(可扩展为校验对应月份的最大天数)
        if 1 <= month <= 12 and 1 <= day <= 31:
            break
    except (ValueError, TypeError):
        continue

# 格式化输出,确保补零
print(f"{year}-{str(month).zfill(2)}-{str(day).zfill(2)}")

内容的提问来源于stack exchange,提问作者MA244foi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:37:26