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

‘set’对象不可下标访问错误解析及代码修复方案

问题分析与解决

错误原因:'set' is not subscriptable

你把months定义成了集合(set),集合是无序的元素集合,只能判断元素是否存在,根本没法用集合[元素]这种下标方式取值。而你需要的是“月份名称→对应数字”的映射关系,这得用字典(dict)——字典是键值对结构,能通过键(月份名)直接拿到对应的值(数字)。

另外你的months定义还有一堆语法错误:

  • 键和值之间缺冒号(应该是"January": "1",不是"January", "1")
  • 多个键值对之间缺逗号(比如"January": "1"后面没加逗号)
  • "December""12"少了冒号和逗号,得改成"December": "12"

修正后的完整代码

# 定义月份名称到数字的映射字典
months = {
    "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 = input("Date: ")
    valid = False
    month = day = year = ""
    
    # 处理斜杠分隔格式(如9/8/1636)
    if "/" in date_input:
        try:
            month, day, year = date_input.split("/")
            # 校验月份、日期范围
            if 1 <= int(month) <= 12 and 1 <= int(day) <= 31:
                valid = True
        except ValueError:
            continue  # 格式错误,重新输入
    
    # 处理英文月份格式(如September 8, 1636)
    elif " " in date_input and "," in date_input:
        try:
            parts = date_input.split(" ")
            if len(parts) == 3:
                month_str, day_str, year = parts
                day = day_str.replace(",", "")
                # 校验月份是否存在、日期范围
                if month_str in months and 1 <= int(day) <= 31:
                    month = months[month_str]
                    valid = True
        except ValueError:
            continue  # 格式错误,重新输入
    
    if valid:
        # 格式化月份和日期为两位数字
        formatted_month = f"{int(month):02d}"
        formatted_day = f"{int(day):02d}"
        print(f"{year}-{formatted_month}-{formatted_day}")
        break

关键修正点说明

  1. 集合改字典:用{键: 值}的字典存月份映射,直接通过months[month_str]拿数字,不用循环遍历,效率更高。
  2. 统一验证循环:把所有输入验证逻辑塞进一个while True循环,无效输入直接重新提示,逻辑更清晰。
  3. 完善格式校验:对两种输入格式分别做合法性检查,包括数字范围、月份名称是否存在等。
  4. 规范输出格式:用f"{int(x):02d}"确保月份和日期都是两位数字,比如1月变成"01",5日变成"05"。
  5. 修复语法错误:补全months定义里缺失的冒号和逗号,避免语法报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:05:04