问题 使用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() 抛出异常,但它返回当前日期。如果在提供的字符串中找不到日期,有人可以告诉我如何避免获取当前日期吗?

提前致谢。


3559
2017-10-18 17:47


起源

如果你打开 fuzzy,你永远不会得到例外...... - Mark Reed


答案:


dateutil docs,特别是解析函数(强调我的):

此外,还提供以下关键字参数:

默认   如果给定,则必须是datetime实例。解析日期中缺少的任何字段都将从此实例中复制。 默认值是当前日期,时间为00:00:00 am

......(剪断)......

模糊   如果fuzzy设置为True,则将忽略字符串中的未知标记。

鉴于你已经设定 fuzzy 至 True,不会抛出异常,因为它会简单地忽略所有未知的标记。并且,作为 default 参数未通过,将返回当前日期。

因此,解决方案将是保持 fuzzy 设置 False,这样无效的格式字符串将引发异常;或检查返回的日期时间是否等于00:00:00 am的当前日期,作为转换失败的指示。


14
2017-10-20 13:20



从v.2.5.0开始,这已不再适用。如果没有找到日期,即使是模糊解析, ValueError 将被提出。 - Paul