2015-05-29 42 views
37

我有一個Python腳本,在我的開發PC上工作得非常好。兩者都是Windows   7,具有相同的Python版本(2.7.9)。然而在目標機器上,我收到了在一臺PC上錯誤「ValueError:無法格式化日期」,在其他PC上工作

ValueError: can't format dates this early

The error似乎來自pywin32模塊。

該代碼使用pywin32調用的第三方庫:

raw = win32com.client.Dispatch("MyLib.MyClass") 

,然後失敗以後:

acq_time = raw.GetCreationDate() 

現在我迷路了,爲什麼這工作我的電腦,而不是在目標機器上。兩者都具有Windows的「公司安裝」,例如,相同的區域和日期時間設置。

問題是什麼?我該如何解決它?

編輯:

查看評論。原因可能是使用了哪個運行庫。我仍在調查。我現在懷疑pywin32安裝時會出現哪些運行時間。爲什麼?因爲我的開發PC上的DependenyWalker說pywin依賴於我的Lotus Notes安裝中的MSVCR90.DLL。這告訴我,它肯定不是「硬」鏈接。

更新二零一五年六月三十日:

我都錯了......現在的問題也發生在我的電腦。

更多信息。腳本讀取數據文件並將讀取的元數據插入到數據庫中。只有較舊的文件似乎受到 錯誤的影響,而不是新的文件(我現在認爲這是假設是錯誤的)。所以我的想法是在開發PC上初始加載,然後希望這個問題不會再出現在新文件中。

如果PC是腳本將運行,它讀取的文件位於Windows共享驅動器(映射網絡驅動器)的 上。我無法訪問該 驅動器,因此我只是將這些文件複製到我的電腦中。現在爲了完成最初的 加載,我請求訪問所述網絡驅動器和BOOM。它也沒有 工作從我的開發。機器從共享驅動器讀取時。

這個問題並不總是發生在同一個文件中。我現在認爲它與特定文件無關。我也在64位的PC上用64位python試過。這需要更長的時間直到發生錯誤。事實上,一個文件被成功讀取,在我的電腦上失敗。我現在認爲這是一種記憶問題?我相信它在日期行中總是失敗,因爲所有其他行只是返回null或一個空字符串而不會導致問題,並且完全可能這樣的值可能爲null。但是對於日期來說這是一個問題,它不應該爲空,然後拋出錯誤。

更新的編輯:

在我的電腦它總是失敗對​​同一文件。單獨加載該文件的效果非常好。我現在認爲這是某種計數器/數字溢出,在讀取n個文件後會出現問題。它與每次運行腳本時加載的文件數量有關,而與文件本身無關。單獨加載時失敗的文件。

+2

兩臺機器上的'pywin32'版本相同嗎?圖書館的相同版本? –

+0

Mark Hammond的鏈接評論說''_tcsftime在某些CRT實現(例如,vs2008 64位 - 也可能是其他)中死於過早的日期會導致「有幫助」。你用什麼CRT? –

+1

Windows區域設置如何,特別是日期格式? –

回答

1

事實證明,這個問題實際上是微不足道的,有些是由於我缺乏有關python和誤導性錯誤消息的經驗。

COM對象raw = win32com.client.Dispatch("MyLib.MyClass")用於在循環中打開專有文件。要解決這個問題,必須在下一次迭代之前「清理」對象。這是由

del rawraw = None做到無論。

這完全解決了這個問題。它與日期或日期格式完全無關。所以Peter Brittain可能是正確的,這個文件限制已經達到。

相關問題