Удалить недаты из списка - PullRequest
0 голосов
/ 20 июня 2020

У меня есть список строк, и я хочу отбросить элементы, не являющиеся датой. Я просто хочу проверить, являются ли они датой, а не преобразовывать их в datetime. Я использую dateutil.parser - как мне обработать возникающую ошибку и продолжить l oop? Вот мой код:

from dateutil.parser import parse

def drop_nondates(dates, fuzzy=False):
    for string in dates:
        try: 
            parse(string, fuzzy=fuzzy)
        except:
            dates.remove(string)
            pass
            
    return dates

Тестирование в небольшом списке:

In: drop_nondates( ['January 2018', 'Enero 2018', 'not a date 2018', '2018'] )
>>> ['January 2018', 'not a date 2018', '2018'] 

, но желаемый результат будет:

['January 2018', '2018'] 

1 Ответ

0 голосов
/ 20 июня 2020

см. Комментарий Asocia: не изменяйте список во время итерации по нему. Ваш код работает нормально, если вы, например, добавляете все "анализируемые" результаты в новый список и возвращаете это:

from dateutil.parser import parse

def drop_nondates(dates, fuzzy=False):
    result = []
    for string in dates:
        try: 
            parse(string, fuzzy=fuzzy)
        except:
            pass
        else:
            result.append(string)
          
    return result

drop_nondates( ['January 2018', 'Enero 2018', 'not a date 2018', '2018'] )
# ['January 2018', '2018']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...