2016-11-05 3 views
0

Ich habe ein Django-Projekt, das auf einem CentOS-Produktionsserver ausgeführt wird. Ich habe den Code vor ungefähr 9 Tagen aktualisiert, und bis heute funktionierte alles gut. Plötzlich bekam ich einen verwirrenden Fehler, der keinen Sinn ergibt. Hier ist mein Zurückverfolgungs ist:baffling python datetime.strptime() "stimmt nicht mit dem Format überein" Fehler

[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' 

Hier ist die Funktion, die den Fehler wirft, ziemlich geradlinig:

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 

ich vorübergehend ein paar print-Anweisungen hinzugefügt doppelt überprüft die Daten in der kommenden, und diese ist, wie sie aussehen:

2016-06-14T13:30:42.735448+00:00 

mich jetzt für verrückt, aber ich muss mit diesem python-Interpreter ... dieser Zeit Daten nicht einverstanden tut Matte ch das Format. Wie bin ich mir so sicher? 1) Ich habe Augen. 2) Das funktionierte vor dem heutigen Tag gut (ich habe den Code nicht geändert und die Eingaben haben sich nicht geändert). Und 3) Ich habe die genaue Zeile in eine Python-Konsole programmiert, so wie datetime.strptime('2016-06-14T13:30:42.735448+00:00'.split('+')[0], '%Y-%m-%dT%X.%f') und es hat funktioniert.

Obwohl ich der einzige Entwickler bin, der Code behandelt, der sich mit diesem bestimmten Projekt befasst, gibt es andere, die auf den Server für Wartung und andere Aktivitäten zugreifen. Ich weiß, dass einige Python-Module kürzlich installiert wurden (Matplotlib für einen), und jemand implementiert Supervisord, um die Prozesssteuerung auf dem Server zu handhaben. Obwohl ich nicht verstehe, warum diese die Gültigkeit eines Standard-Python-Aufrufs beeinflussen würden. Ich könnte jedes Genie und/oder jede Brillianz da draußen einsetzen. Vielen Dank.

+0

Ich kann das nicht reproduzieren. 'datetime.datetime.strptime ('2016-10-15T15: 12: 41.787370', '% Y-% m-% dT% X.% f') 'funktioniert gut, wie Sie sagen. –

+0

Die Änderung, die Sie vor 9 Tagen vorgenommen haben, hängt damit zusammen? Ist es möglich, dass Sie vergessen haben, den Server neu zu starten und der alte Code ausgeführt wurde? Richten die print-Anweisungen ihre Ausgabe auch auf eine Datei? Haben Sie diese Datei geöffnet, sagen Sie in vim, um zu überprüfen, dass sich in der Zeichenfolge keine unsichtbaren Zeichen befinden? Kannst du auch die Formatzeichenfolge überprüfen und sicherstellen, dass sie keine unsichtbaren Zeichen enthält und dass Y (und T und X) wirklich die englischen Zeichen sind, die sie sein sollen? (Zum Beispiel gibt es griechische Zeichen, die genau gleich aussehen, aber unterschiedlich sind.) –

Antwort

0

Also wir Supervisord vom Server deinstalliert, und dann ging der Fehler weg. Sehr eigenartig. Ich werde die Frage als beantwortet markieren, obwohl wir immer noch nicht genau wissen, warum Supervisord ein Standard-Python-Modul zum Fehlschlagen bringt ... Wir werden uns für weitere Hilfe an sie wenden.

Verwandte Themen