2012-08-06 122 views
2

我有一個腳本已經崩潰(看似)不可預測。我無法弄清楚如何重現它。Python系統日誌文件

Python是否保留一個全局系統日誌文件,所以我可以回去看看什麼異常導致退出?如果是這樣,那麼在Windows上可以找到哪裏?如果可能的話,我希望能夠看到回溯。

編輯:我知道我可以整個腳本try...except塊內,但我不知道多久會來運行它再次崩潰之前。我希望能夠至少獲得關於已經發生的崩潰的粗略信息,即使這些信息只是導致崩潰的異常類型。這樣我可以嘗試更可靠地重現錯誤。

我懷疑崩潰是由於與外部設備通信失敗(可能是簡單的鬆散電纜)造成的。這些失敗本質上是隨機的,難以重現,所以我想知道它是通信錯誤還是真正的代碼錯誤。

+1

請參閱python文檔中的「驗屍後」調試。 – 2012-08-06 14:17:04

+0

你試圖運行的是什麼腳本?你可以發佈一個你認爲發生問題的小片段嗎? – 2012-08-06 14:30:32

+1

它看起來像pdb中的驗屍調試器只適用於最後的崩潰,並且在解釋器的同一個實例中。我希望能夠查看Python在過去24小時內崩潰的所有時間,並查看出了什麼問題。這可能嗎? – 2012-08-06 14:34:47

回答

0

如果你想知道關於例外的信息,你可以使用此代碼。

try: 
    #do some stuff 
    1/0 #stuff that generated the exception 
except Exception as ex: 
    print ex 
    raw_input() 

爲了正確調試,有一個工具winpdb。有一個非常好的教程可用於學習使用它的調試debugging tutorial

+1

我完全熟悉'try ... except'和調試技術。我希望能夠回到半小時前墜毀的實例並瞭解發生了什麼事。 – 2012-08-06 14:31:07

0

你可以「趕上」exception?如果是,則可以使用traceback來打印堆棧跟蹤,並找出發生問題的位置。

然後,您可以使用Eclipse調試有問題的模塊(即使它是Python庫的一部分,它將以可讀的形式)。


import traceback 
... 
... 

try: 
    <your script> 
except Exception as runtime_ex: 
    print runtime_ex, traceback.format_exc()