2012-10-18 8 views
11

Sto usando python-dateutil per l'analisi di una data da una stringa:Trouble in data parsing utilizzando 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 

Quello che mi aspetto è per dateutil.parser.parse('some null string', fuzzy=True).date() un'eccezione, ma è di tornare alla data corrente. Qualcuno può mostrarmi come evitare di ottenere la data corrente, se non viene trovata una data nella stringa fornita?

Grazie in anticipo.

+1

Se si attiva 'fuzzy', non si otterrà mai un'eccezione ... –

risposta

14

Vedere il dateutil docs, in particolare la funzione parse (sottolinea mio):

Inoltre, i seguenti argomenti a parola chiave sono disponibili:

predefinita Se presente, tale deve essere un esempio datetime. Tutti i campi mancanti nella data analizzata verranno copiati da questa istanza. Il valore predefinito è la data corrente, 00:00:00 am.

... (snip) ...

sfocata Se sfocata è impostata su true, i token sconosciuti nella stringa verranno ignorati.

Dato che hai impostato fuzzy-True, non verrà generata un'eccezione in quanto sarà semplicemente ignorare tutti i gettoni sconosciuti. E, poiché l'argomento default non viene passato, verrà restituita la data corrente.

Quindi la soluzione sarà mantenere fuzzy impostato su False, in modo che le stringhe di formato non valide generino un'eccezione; o controllare se il datetime restituito è uguale alla data corrente alle 00:00:00 am come indicazione di una conversione non riuscita.

+2

Questo non è più vero, a partire dalla v.2.5.0. Se non viene rilevata alcuna data, anche durante l'analisi fuzzy, verrà sollevato il valore di "ValoreErrore". – Paul