pyt*_*on1 3 python error-handling leap-year
我有一个程序,用户在其中输入一个日期,然后将其与另一个日期进行比较,以查看第一个出现的日期。
在用户输入2月29日且程序返回2月28日的情况下(因为没有leap年),我将如何编写代码?
例:
def date(prompt):
''' returns the date that user inputs and validates it'''
while True:
try:
date = raw_input(prompt)
if len(date) >= 5:
month = date[0:2]
day = date[3:5]
dateObject = datetime.date(2011, int(month), int(day))
return dateObject
except ValueError:
print "Please enter a valid month and day"
Run Code Online (Sandbox Code Playgroud)
你如何比较日期?如果您使用这些datetime功能,那么这应该已经说明了此类问题。
>>> datetime.datetime(2011, 2, 28)
datetime.datetime(2011, 2, 28, 0, 0)
>>> datetime.datetime(2011, 2, 29)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: day is out of range for month
>>> datetime.datetime(1600, 2, 29)
datetime.datetime(1600, 2, 29, 0, 0)
Run Code Online (Sandbox Code Playgroud)
datetime.timedelta() 用于表示两个日期之间的差异
>>> datetime.datetime(2011, 2, 28) + datetime.timedelta(days=10)
datetime.datetime(2011, 3, 10, 0, 0)
>>> datetime.datetime(1600, 2, 28) + datetime.timedelta(days=10)
datetime.datetime(1600, 3, 9, 0, 0)
>>> datetime.datetime(2011, 2, 28) - datetime.datetime(2011, 4, 10)
datetime.timedelta(-41)
Run Code Online (Sandbox Code Playgroud)
不知道这如何适合您的代码,但它可能是一个选项;-)
如果您要检查:month == 2 and day == 29用calendar.isleap()检查是否是it年是多余的。一date/ datetime将提高ValueError,如果它被设置为2月29日在非leapyear。