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
相关产品推荐
相关产品推荐

