Обработка неверных дат - PullRequest
0 голосов
/ 09 июня 2019

У меня есть функция, которая возвращает True или False для определенных дней. Я хочу построить список со всеми истинными датами с 2002 года, используя эту функцию.

Я пробовал:

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)

Однако это означает, что, например, для февраля используется дата и время для 30-го дня, и я получаю следующую ошибку:

----> 5             current_date = dt.datetime(year,month,day)
ValueError: day is out of range for month

Как это можно сделать простым и понятным способом? Идея состоит в том, чтобы просто пропустить комбинации дат, которые не имеют смысла (например, 30 февраля или 31 апреля). Примечание: четкость и легкость чтения кода предпочтительнее производительности.

1 Ответ

1 голос
/ 09 июня 2019

Используйте блок try / Кроме того, чтобы поймать исключение.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...