Проблема с датой синтаксического анализа с использованием dateutil

Я использую python-dateutil для синтаксического анализа даты из строки:

import dateutil.parser
print dateutil.parser.parse('some null string', fuzzy=True).date()
2012-10-18
print dateutil.parser.parse('some 31 Oct 2012 string', fuzzy=True).date()
2012-10-31

Я ожидаю, что для dateutil.parser.parse('some null string', fuzzy=True).date() будет выбрано исключение, но оно вернет текущую дату. Может ли кто-нибудь показать мне, как я могу избежать получения текущей даты, если в предоставленной строке не найдено ни одной даты?

Спасибо заранее.

Ответ 1

Смотрите dateutil docs, в частности функцию синтаксического анализа (подчеркивает мою):

Кроме того, доступны следующие аргументы ключевых слов:

по умолчаниюЕсли задано, это должен быть экземпляр datetime. Любые поля, отсутствующие в разобранной дате, будут скопированы из этого экземпляра. Значение по умолчанию - текущая дата в 00:00:00.

... (snip)...

нечеткаяЕсли для параметра fuzzy установлено значение True, неизвестные токены в строке будут проигнорированы.

Учитывая, что вы установили fuzzy в True, исключение не будет выбрано, поскольку оно просто игнорирует все неизвестные токены. И, поскольку аргумент default не передается, будет возвращена текущая дата.

Таким образом, решение будет либо поддерживать fuzzy на False, чтобы недопустимые строки формата генерировали исключение; или проверить, соответствует ли возвращенное время datetime текущей дате в 00:00:00 утра как индикация неудачного преобразования.