我有一个函数,可以在特定日期返回True或False。 我想使用该函数构建一个自2002年以来所有True日期的列表。
我尝试过:
import datetime as dt
valid_days = []
for year in range(2002,2018):
for month in range(1,13):
for day in range(1,32):
current_date = dt.datetime(year,month,day)
if(is_valid_day(current_date)):
valid_days.append(current_date)
但是,这意味着例如对于2月,尝试使用第30天的日期时间,并且出现以下错误:
----> 5 current_date = dt.datetime(year,month,day)
ValueError: day is out of range for month
如何用一种易于实现的pythonic方法来处理?想法是跳过没有意义的日期组合(例如2月30日或4月31日)。注意:清晰,易读的代码优先于性能。
答案 0 :(得分:1)
使用try / except块捕获异常。
for day in range(1,32):
try:
current_date = dt.datetime(year,month,day)
except ValueError:
# once we reach an invalid day, any following
# days are also invalid, so stop the day loop
break
if(is_valid_day(current_date)):
valid_days.append(current_date)