Ho uno script Python che funziona perfettamente sul mio PC di sviluppo. Entrambi sono Windows 7 con la stessa versione di Python (2.7.9). Tuttavia sul computer di destinazione ho unErrore "ValueError: impossibile formattare le date così presto" su un PC, funziona su altro
ValueError: can't format dates this early
The error sembra venire dal modulo pywin32.
Il codice utilizza una libreria di terze parti invocata da pywin32:
raw = win32com.client.Dispatch("MyLib.MyClass")
e poi fallisce in seguito:
acq_time = raw.GetCreationDate()
Ora mi sono perso perché questo sta lavorando sul mio PC e non sulla macchina target. Entrambi hanno una "installazione aziendale" di Windows 7, ad esempio, le stesse impostazioni regionali e di data e ora.
Qual è il problema? Come potrei risolverlo?
MODIFICA:
Vedere i commenti. La causa è probabilmente il tempo di esecuzione di C++. Sto ancora indagando. Ora sospetto che sia importante sapere quali runtime sono presenti al momento dell'installazione di pywin32. Perché? Poiché DependenyWalker sul mio PC di sviluppo dice che pywin dipende da MSVCR90.DLL
nella mia installazione di Lotus Notes. Questo mi dice che sicuramente non è "difficile" collegato.
Aggiornamento 30.06.2015:
mi era tutto sbagliato ... Il problema ora avviene anche sul mio PC.
Alcune ulteriori informazioni. Lo script legge i file di dati e inserisce i metadati di lettura in un database. Solo i file più vecchi sembrano essere interessati dal bug , non nuovi (ora penso che questo sia un presupposto errato). Quindi l'idea era quella di caricare inizialmente il mio PC Dev e quindi sperare che il problema non si verifichi più con i nuovi file.
In caso di PC in cui verrà eseguito lo script, i file che legge sono su un'unità condivisa di Windows (unità di rete mappata). Non ho accesso a quella unità quindi ho appena copiato i file nel mio PC. Ora per fare il carico iniziale ho richiesto l'accesso a detta unità di rete e BOOM. Inoltre, non funziona dal mio Dev. macchina durante la lettura dall'unità condivisa.
Il problema non si verifica sempre con lo stesso file. Ora penso che non abbia nulla a che fare con un file specifico. Ho anche provato su un PC a 64 bit con python a 64 bit. Ci è voluto più tempo fino a quando si è verificato l'errore. In effetti un file è stato letto con successo e non è riuscito sul mio PC. Ora penso che sia una sorta di problema di memoria? Credo che poi fallisce sempre sulla linea data perché tutte le altre linee restituiscono null o una stringa vuota che non causa alcun problema ed è del tutto possibile che un valore del genere possa essere nullo. Ma per la data è un problema e non dovrebbe essere nullo e quindi l'errore viene generato.
EDIT di aggiornamento:
Sul mio PC non riesce sempre sullo stesso file. Caricare quel file funziona perfettamente perfettamente. Ora penso che sia una sorta di overflow di contatore/numero che dopo aver letto n file, il problema si verifica.Ha a che fare con la quantità di file che carico per l'esecuzione dello script e non il file stesso. I file che non funzionano funzionano quando li si carica individualmente.
La stessa versione di 'pywin32' su entrambe le macchine? La stessa versione della libreria? –
Il commento collegato di Mark Hammond dice che '_tcsftime cerca di essere" utile "morendo con una data troppo anticipata in alcune implementazioni CRT (ad esempio, vs2008 a 64 bit - e probabilmente altre)'. Che CRT stai usando? –
E riguardo le impostazioni regionali di Windows, in particolare il formato della data? –