2017-10-21 262 views
0

我從另一個程序(Stata)調用Python腳本,該程序有調用操作系統(shell/winexec)的命令。這反過來會打開一個系統窗口,您可以在其中看到正在運行的Python腳本。有時腳本運行得很好,有時會在完成前突然退出。我不知道爲什麼。當我在IDLE中運行腳本時,我從來沒有遇到這個問題。我使用Windows和Python 3.4。Python腳本在通過窗口運行時突然退出

我試着通過記錄Python腳本來捕獲錯誤,但沒有錯誤在那裏記錄。一切似乎正常工作,直到程序剛剛退出(並不總是在同一點)。另外,我打電話給7個腳本,其中只有兩個有這個突然退出問題(再次,他們總是通過IDLE運行良好)。我嘗試改變我調用腳本的順序,並使用shell而不是winexec,反之亦然。在這一點上,我甚至不知道該怎麼嘗試。它是操作系統嗎?蟒蛇?塔塔?任何想法,將不勝感激!

+1

由於異常,Python程序是否正在退出?順便說一句,_what_ Python程序? –

+0

不,我沒有在日誌文件中看到任何異常。不確定你的意思是「什麼Python程序」;如果是關於劇本的內容,那就是在搞點東西。再說一遍,當我使用IDLE時運行得很好。 – RandomCat

+0

在Python腳本中的大部分邏輯中放置一個'try/except',用於捕獲執行過程中可能引發的_any_異常(並在退出前打印出有意義的錯誤消息)。 – martineau

回答

0

如果沒有Martineau的話,不可能想到這件事!發佈答案,以防任何人有類似的(看似)神祕錯誤。

首先,我記錄的錯誤,如馬蒂諾建議:

import logging 

logging.basicConfig(filename='C:/MyLog.log',level=logging.DEBUG) 

try: 
    [all my code] 

except Exception as e: 
    logging.info(e) 

此記錄的錯誤:「字符映射在448位置」編解碼器不能編碼字符‘\ u2013’:字符映射爲未定義」。由於某些原因超出了我的薪酬等級,IDLE和python.exe(在Python 3.4中)不以相同的方式處理編碼。這是造成這個問題的原因(並且只有當特殊字符出現時,這就是爲什麼它每次都沒有崩潰)。

我尋找解決方案的編碼問題,並發現它here。基本上,我從Python 3.4升級到Python 3.6,編碼問題消失了。