2012-10-18 6 views
11

Używam python-dateutil do analizowania datę z ciągiem:Kłopot w terminie analizowania korzystania 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 

Co Oczekuję jest dateutil.parser.parse('some null string', fuzzy=True).date() rzucić wyjątek, ale to wraca bieżącą datę. Czy ktoś może mi pokazać, jak mogę uniknąć otrzymania bieżącej daty, jeśli w podanym ciągu nie znaleziono daty?

Z góry dziękuję.

+1

Jeśli włączysz 'fuzzy', nigdy nie otrzymasz wyjątku ... –

Odpowiedz

14

Zobacz dateutil docs konkretnie funkcję parse (podkreśla moje):

Dodatkowo, poniższe argumenty kluczowe są dostępne:

domyślny Jeśli podana, to musi być datetime instancji. Wszystkie pola brakujące w analizowanej dacie zostaną skopiowane z tej instancji. Domyślną wartością jest bieżąca data o 00:00:00 am.

... (ciach) ...

rozmyta Jeśli rozmyta jest ustawiona na True, nieznane tokeny w ciągu będą ignorowane.

Biorąc pod uwagę, że masz ustawione fuzzy do True, nie zostanie wyrzucony wyjątek jak to będzie po prostu zignorować wszystkie nieznane znaki. Ponieważ argument default nie zostanie przekazany, zwrócona zostanie bieżąca data.

Rozwiązaniem będzie ustawienie fuzzy na wartość False, aby niepoprawne ciągi formatów powodowały wyjątek; lub sprawdź, czy zwrócona data-godzina jest równa bieżącej dacie o godzinie 00:00:00 jako wskazanie nieudanej konwersji.

+2

To już nie jest prawda, jak w wersji 2.5.0. Jeśli nie zostanie znaleziona żadna data, nawet podczas przetwarzania z rozmytym tekstem zostanie wywołany "ValueError". – Paul

Powiązane problemy