Arrow成功解析了一些不是默认模式的输入

时间:2016-10-28 14:59:15

标签: python arrow-python

如果输入无效,箭头会引发ParserError

>>> arrow.get('abc')
ParserError: Could not match input to any of [u'YYYY-MM-DD', u'YYYY/MM/DD', u'YYYY.MM.DD', u'YYYY-MM', u'YYYY/MM', u'YYYY.MM', u'YYYY', u'YYYY', u'YYYY'] on 'abc'
>>> arrow.get('09-10-201')
ParserError: Could not match input to any of [u'YYYY-MM-DD', u'YYYY/MM/DD', u'YYYY.MM.DD', u'YYYY-MM', u'YYYY/MM', u'YYYY.MM', u'YYYY', u'YYYY', u'YYYY'] on '09-10-201'

这显示了箭头在引发异常之前尝试过的所有匹配模式。但是,偶尔,即使输入与这些模式中的任何一个都不匹配,它也会静默地将其转换为对象:

>>> arrow.get('09-10-2017')
<Arrow [2017-01-01T00:00:00+00:00]>  # Succeeds with incorrect date

这是由我的系统区域设置提供的其他隐藏解析模式解释的吗?如果是这样,为什么它会解析2017年而忽略09年和10年?如果没有,为什么解析成功?

1 个答案:

答案 0 :(得分:1)

Arrow使用正则表达式将给定字符串与日期格式匹配。

例如:

arrow.get('aaa2012-01-21aa')

被接受为输入

<Arrow [2012-01-21T00:00:00+00:00]>

因为它匹配内部转换为YYYY-MM-DD形式的正则表达式的格式'(?P<YYYY>\d{4})-(?P<MM>\d{2})-(?P<DD>\d{2})',并且此正则表达式捕获了大小写。

您的输入仅与YYYY匹配,其余字符串将被丢弃。

为了提出错误并强制使用特定格式,@ asongtoruin提供的建议非常好。