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

Python日期解析实验BUG排查:EOF错误与日期格式处理问题

解决Zybooks Python 33.15《解析日期》实验的两个问题

问题概述

  • 实验需求:读取符合March 1, 1990格式的日期,转换为3/1/1990格式输出;不符合格式的忽略;输入以单独一行的-1结束。
  • 当前代码存在两个核心问题:
    1. 循环读取输入时触发EOFError
    2. 无法去除日期日部分的逗号,导致输出错误格式(如3/1,/1990)

问题分析与修复方案

1. 修复EOFError问题

EOFError通常因input()读取时输入流提前终止导致(比如测试时未输入-1就结束输入)。解决方式是在循环中主动判断终止条件,同时捕获EOF异常做兜底处理。

2. 修复逗号未去除问题

日期中的逗号跟随在日数字后(如1,),可通过字符串替换或拆分后清理的方式去除,确保日部分为纯数字。

修复后的完整代码

# 月份名称到数字的映射字典
month_map = {
    '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:
    try:
        line = input().strip()
        # 检测终止输入条件
        if line == '-1':
            break
        # 拆分日期各部分
        parts = line.split()
        # 验证格式合法性:必须拆分为3个部分
        if len(parts) != 3:
            continue
        month_name, day_part, year = parts
        # 去除日部分的逗号
        day = day_part.replace(',', '')
        # 验证月份是否合法、日和年是否为数字
        if month_name not in month_map or not day.isdigit() or not year.isdigit():
            continue
        # 输出转换后的日期格式
        print(f"{month_map[month_name]}/{day}/{year}")
    except EOFError:
        # 捕获输入流异常,终止循环
        break

代码关键说明

  • 月份映射:用字典实现月份名称到数字的快速转换,避免冗余判断。
  • 输入容错:通过try-except捕获EOFError,防止输入异常导致程序崩溃;每次读取后优先判断是否为终止符-1。
  • 格式校验:检查拆分后的部分数量、月份合法性、日和年的数字属性,不符合条件的输入直接跳过。
  • 逗号清理:使用replace(',', '')直接移除日部分的逗号,保证输出格式正确。

测试示例

测试输入

March 1, 1990
April 15, 2023
Invalid date format
-1

输出结果

3/1/1990
4/15/2023

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 15:56:01