我有一个Django项目正在一个活的CentOS生产服务器上运行。我大约9天前更新了代码,并且所有内容一直运行良好,直到今天。突然,我开始发现一个毫无意义的莫名其妙的错误。这是我回溯:baffling python datetime.strptime()“不匹配格式”错误
[Fri Nov 04 18:43:00 2016] [error] File "/usr/lib/tethys/src/tethys_apps/tethysapp/hydroshare_gis/utilities.py", line 1196, in res_has_been_updated
[Fri Nov 04 18:43:00 2016] [error] db_date_obj = datetime.strptime(db_date.split('+')[0], '%Y-%m-%dT%X.%f')
[Fri Nov 04 18:43:00 2016] [error] File "/usr/local/lib/python2.7/_strptime.py", line 325, in _strptime
[Fri Nov 04 18:43:00 2016] [error] (data_string, format))
[Fri Nov 04 18:43:00 2016] [error] ValueError: time data '2016-10-15T15:12:41.787370' does not match format '%Y-%m-%dT%X.%f'
下面是引发错误的功能,非常简单的:
def res_has_been_updated(db_date, res_date):
db_date_obj = datetime.strptime(db_date.split('+')[0], '%Y-%m-%dT%X.%f')
res_date_obj = datetime.strptime(res_date.split('+')[0], '%Y-%m-%dT%X.%f')
if db_date_obj < res_date_obj:
return True
return False
我暂时增加了一些打印语句要仔细检查的日期到来了,这是他们的样子:
2016-06-14T13:30:42.735448+00:00
现在叫我疯了,但我必须用这个Python解释器不同意......那一次数据确实垫格式。我怎么这么确定? 1)我有眼睛。 2)今天之前工作正常(我没有修改代码,输入没有改变)。 3)我将精确的代码硬编码到一个python控制台中,就像datetime.strptime('2016-06-14T13:30:42.735448+00:00'.split('+')[0], '%Y-%m-%dT%X.%f')
一样,它工作正常。
尽管我是唯一一个接触代码处理这个特定项目的开发人员,但还有其他人访问服务器进行维护和其他活动。我知道最近安装了一些python模块(matplotlib for one),并且有人实现了supervisord来处理服务器上的进程控制。虽然我不明白为什么这些会影响标准python调用的有效性。我可以使用任何天才和/或辉煌。谢谢。
我不能重现这一点。 'datetime.datetime.strptime('2016-10-15T15:12:41.787370','%Y-%m-%dT%X.%f')'正常工作,就像你说的那样。 – 2016-11-05 06:57:27
9天前您所做的更改与此有关吗?是否有可能忘记重新启动服务器并且旧代码已经运行?另外,打印语句是否将输出指向文件?你在vim中打开过那个文件,检查字符串中是否有不可见的字符?你还可以检查格式字符串并确保它没有隐形字符,并且Y(和T和X)确实是它们应该是的英文字符? (例如,希腊字符看起来完全一样但不同。) –