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



给定无效输入,箭头抬高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使用regex将给定字符串与日期格式匹配。

例如:

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

对于引发错误并强制使用特定格式,@asongtorui给出的建议是一个非常好的建议。

相关内容

  • 没有找到相关文章