2012-10-18 100 views
11

我使用python-dateutil從字符串解析日期:麻煩解析日期使用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

如果你打開'模糊',你永遠不會得到一個例外... –

回答

14

dateutil docs,具體的解析函數(強調我的):

此外,以下關鍵字參數可供選擇:

默認 如果給定的,這必須是一個DateTime實例。解析日期中缺少的任何字段將從此實例複製。 默認值是當前日期,在00:00:00上午

...(SNIP)...

模糊 如果模糊設置爲True,字符串中的未知的令牌將被忽略。

既然你已經設置fuzzyTrue,也不例外會被拋出,因爲它會簡單地忽略所有未知的令牌。而且,由於default參數未被傳遞,當前日期將被返回。

因此,解決方案將保留fuzzy設置爲False,以便無效的格式字符串將引發異常;或者檢查返回的日期時間是否等於上午00:00:00的當前日期,作爲轉換失敗的指示。

+2

這不再是如此,從v.2.5.0。如果沒有找到日期,即使在模糊解析時,也會引發'ValueError'。 – Paul