2016-11-05 64 views
0

我有一个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调用的有效性。我可以使用任何天才和/或辉煌。谢谢。

+0

我不能重现这一点。 'datetime.datetime.strptime('2016-10-15T15:12:41.787370','%Y-%m-%dT%X.%f')'正常工作,就像你说的那样。 – 2016-11-05 06:57:27

+0

9天前您所做的更改与此有关吗?是否有可能忘记重新启动服务器并且旧代码已经运行?另外,打印语句是否将输出指向文件?你在vim中打开过那个文件,检查字符串中是否有不可见的字符?你还可以检查格式字符串并确保它没有隐形字符,并且Y(和T和X)确实是它们应该是的英文字符? (例如,希腊字符看起来完全一样但不同。) –

回答

0

所以我们从服务器上卸载了supervisord,然后错误消失了。很奇怪。尽管我们仍然不确切地知道supervisord为什么会导致标准python模块发生故障,但我会将问题标记为已回答。我们将向他们寻求进一步的帮助。