将用户输入的字符串转换为 datetime.date 时防止 ValueError

问题描述

当遇到来自用户输入无效日期的 ValueError 时,是否可能没有错误?例如,如果我在日期框中输入“123456”,程序就会出错。理想情况下,它会要求用户再次尝试输入日期,就像他们刚刚输入错误的日期长度一样。

import datetime
from datetime import timedelta

#start date
while True:
    startDate = input('Start Date (DDMMYY): ')
    if startDate == '':
        startDate = datetime.date.today() - timedelta(days=1) #defaults to yesterday
        break
    elif len(startDate) == 6:
        startDate = datetime.datetime.strptime(startDate,'%d%m%y').date() #converts input to proper date format if correct length
        break
    print('Date must be in format DDMMYY,please try again')
#end date
while True:
    endDate = input('End Date (DDMMYY): ')
    if endDate == '':
        endDate = datetime.date.today() #defaults to today
        break
    elif len(endDate) == 6:
        endDate = datetime.datetime.strptime(endDate,'%d%m%y').date()
        break
    print('Date must be in format DDMMYY,please try again')

print(startDate)
print(endDate)

解决方法

是的,您可以使用像这样的 try-except 语句

#start date
while True:
    startDate = input('Start Date (DDMMYY): ')
    if startDate == '':
        startDate = datetime.date.today() - timedelta(days=1) #defaults to yesterday
        break
    elif len(startDate) == 6:
        try:
            startDate = datetime.datetime.strptime(startDate,'%d%m%y').date() #converts input to proper date format if correct length
            break
        except:
            print('Date must be in format DDMMYY,please try again')