总是出现ValueError,如何修复?

问题描述 投票:0回答:1

我正在学习CS50P,在做题时遇到了一些麻烦。我输入 9/8/1636 但输出显示存在 ValueError。我附上了问题和我的代码,我使用 VS 代码。希望有人能帮我一个忙。

问题: 在美国,日期通常按月日年顺序 (MM/DD/YYYY) 进行格式化,也称为中端顺序,这可以说是糟糕的设计。该格式的日期无法轻松排序,因为日期的年份排在最后而不是最前面。例如,尝试在任何程序(例如电子表格)中按时间顺序排序,例如 2/2/1800、3/3/1900 和 1/1/2000。该格式的日期也含糊不清。哈佛成立于 1636 年 9 月 8 日,但 9/8/1636 也可以解释为 1636 年 8 月 9 日! 幸运的是,计算机倾向于使用 ISO 8601,这是一项国际标准,规定日期应按年-月-日 (YYYY-MM-DD) 顺序进行格式化,无论在哪个国家/地区,将年份格式化为四位数字,将月份格式化为两位数,和两位数的日期,根据需要“填充”每个前导零。 在名为 outdated.py 的文件中,实现一个程序,提示用户输入日期(anno Domini),按月日年顺序,格式如 9/8/1636 或 1636 年 9 月 8 日,其中后者中的月份可能是可以是下面列表中的任意值: [ “一月”, “二月”, “行进”, “四月”, “可能”, “六月”, “七月”, “八月”, “九月”, “十月”, “十一月”, “十二月” ] 然后以 YYYY-MM-DD 格式输出相同的日期。如果用户输入的任一格式都不是有效日期,则再次提示用户。假设每个月不超过31天;无需验证一个月是否有 28 天、29 天、30 天或 31 天。

我向 GPT-4 寻求帮助,但没有成功。我真的不知道该怎么办。请帮助我。

month_list = [
    "January",
    "February",
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December"
]
while True:
    try:
        date = input('Please enter a date in month-day-year order: ').replace(' ','/').replace(',','/')
        date_list = list(date.split('/'))
        month = date_list[0]
        day = date_list[1]
        year = date_list[2]

        if month in month_list:
            month = month_list.index(month) + 1
        elif month.isdigit() and 1<=int(month)<=12:
            month=int(month)
        else:
            print('Month should be a valid month name or a number between 1 and 12.')
            continue

        if 1<=int(day)<=31:
                print(f'{year}-{month:02d}-{day:02d}')
        else:
            print('Day should be between 1 and 31.')
            continue
    
    except ValueError:
        print('Date invalid, please enter again.')
python exception cs50 valueerror
1个回答
0
投票

尝试将

print(f'{year}-{month:02d}-{month:02d}')
替换为
print(f'{year}-{int(month):02d}-{int(month):02d}')

格式化程序

02d
需要一个整数,而不是字符串,请参阅这个答案:https://stackoverflow.com/a/36543850/18189622

一般来说,我建议不要像您那样广泛使用

try
except
,或者至少删除它或注释掉它以进行调试,然后您将收到错误消息,更清楚地显示哪些行导致错误。

© www.soinside.com 2019 - 2024. All rights reserved.