是否有crash reporting框架可用於pure Python Tkinter applications?理想情況下,它應該跨平臺工作。Python中的崩潰報告
實際上,這更像是「異常報告」,因爲Python解釋器本身幾乎不會崩潰。
以下是樣本崩潰記者:
是否有crash reporting框架可用於pure Python Tkinter applications?理想情況下,它應該跨平臺工作。Python中的崩潰報告
實際上,這更像是「異常報告」,因爲Python解釋器本身幾乎不會崩潰。
以下是樣本崩潰記者:
棒嘗試節選無處不在您的應用程序可能會崩潰(I/O,網絡等)。每當調用except以外,調用一個會殺死舊窗口的函數,產生一個新的tkinter通知窗口或帶有錯誤消息的custom one。
做一個root.after到新窗口併發送錯誤報告(urllib)。
如果您願意,請重新啓動按鈕。
沒有崩潰報告框架 - 因爲tkinter不是那種類型的GUI。它幾乎是簡單的命令行應用程序的包裝。
如果您想要在上面的屏幕截圖中看到的功能,請轉到pyqt/gtk或wxpython。但我很確定你去哪裏,你必須寫自己的記者。
而不是污染你的代碼到處都是try..except
,你應該通過設置sys.excepthook
來實現你自己的除鉤子。這裏有一個例子:
import sys
import traceback
def install_excepthook():
def my_excepthook(exctype, value, tb):
s = ''.join(traceback.format_exception(exctype, value, tb))
dialog = ErrorReportDialog(None, s)
dialog.exec_()
sys.excepthook = my_excepthook
打電話給你的應用程序啓動時install_exception()
。
ErrorReportDialog
是我製作的Qt對話框。 traceback.format_exception()
將格式參數傳遞給except鉤子,就像在Python的解釋器中一樣。
編輯:我忘了提及一個小問題。它不適用於線程(好吧,至少它沒有上次我檢查)。對於在另一個線程中運行的代碼,您需要將其包裝在try..except
塊中。
我不同意tkinter「幾乎是簡單的命令行應用程序的包裝」的說法。 Tkinter是一個完整的GUI庫,適合各種用途。事實上,Tkinter也可以用來實現截圖中的所有功能。 – 2009-12-28 17:05:15
我並不反對,但如果要用最少的努力製作一個完整的,可維護的GUI(帶有崩潰報告和線程),可以使用上面列出的其他工具包之一。他們存在的原因是因爲Tkinter沒有充分滿足這種需求。 – torger 2009-12-28 23:10:39