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

Arrow successfully parses some input not in default patterns

给定无效输入,箭头升起 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 在引发异常之前尝试过的所有匹配模式。然而,偶尔,即使输入与这些模式中的任何一个都不匹配,它也会默默地将其转换为一个对象:

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

这是否可以通过我的系统区域设置提供的额外隐藏解析模式来解释?如果是这样,为什么它会解析 2017 而忽略 09 和 10?如果没有,为什么解析成功了?

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,字符串的其余部分被丢弃。

对于引发错误并强制使用特定格式,@ason​​gtoruin 给出的建议非常好。