将用户输入的字符串转换为 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')
能不能遇到用户输入无效日期的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')