给定无效输入,箭头抬高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给出的建议是一个非常好的建议。