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

Preventing ValueError when converting a user inputted string to datetime.date

能不能遇到用户输入无效日期的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')