Search code examples
pythondatetimevalueerrorstrptime

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


Is it possible to not have an error when it encounters a ValueError from a user inputting an invalid date? For example if I input "123456" in the date box the program will error. Ideally it would ask the user to try and enter the date again, much like it does if they input something the wrong length of a date just now.

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)

Solution

  • Yes, you can use a try-except statement like this

    #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')