我在python中遇到一个非常奇怪的错误。
from dateutil import parser
string = "March 2008"
parser.parse(string)
datetime.datetime(2008, 3, 30, 0, 0)
string = "February 2008"
parser.parse(string)
追踪(最近一次呼叫最后一次):
文件“”,第1行,in 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/parser.py”,第697行,解析 return DEFAULTPARSER.parse(timestr,** kwargs) 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/parser.py”,第310行,解析 ret = default.replace(** repl) ValueError:day超出了月份的范围
我知道我可以在我的字符串中添加一天以使解析器工作,但是我不知道为什么dateutil在没有2月份的情况下不起作用,而它每隔一个月就会工作。
答案 0 :(得分:4)
这很有趣。
来自dateutil.parser:
def parse(self, timestr, default=None,
ignoretz=False, tzinfos=None,
**kwargs):
if not default:
default = datetime.datetime.now().replace(hour=0, minute=0,
second=0, microsecond=0)
基本上,如果您不提供一天,任何缺少一天的日期字符串将默认为当天。实际情况是今天的第30天,当然是2月没有。这可能被视为dateutil中的错误。
答案 1 :(得分:1)
问题是解析后的字符串中不存在的任何字段都取自当前日期。
请注意,“2008年3月”将于2008年3月30日返回,因为您是在2014年7月30日运行的。
同样,只有“三月”会给你2014年3月30日。
所以,“2008年2月”会给你2008年2月30日,这当然是无效的。