处理无效的日期时间

时间:2019-06-09 19:53:57

标签: python datetime

我有一个函数,可以在特定日期返回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日)。注意:清晰,易读的代码优先于性能。

1 个答案:

答案 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)