如果输入无效,箭头会引发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年?如果没有,为什么解析成功?
答案 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提供的建议非常好。