2011-07-12 42 views
4

開始在Python中編程我覺得在家裏有錯誤報告。現在我正在用Tkinter編程,我發現它經常發生我的程序中有錯誤,即使它們產生了一個異常我也沒有注意到:我趕上它們(有時)只是因爲我去調試Step by步驟(我使用wingIDE)和例如在給定的行我看到異常報告。但令我惱火的是,程序不會停止,但即使在而不是內部的try/error中也會發生這種情況。tkinter python:捕捉異常

如果我說的是有道理的,你知道一些總體方法來至少顯示錯誤嗎?在Tkinter中,我可以創建一個錯誤窗口,並在發生異常時填充它。

+2

有一個優雅的解決方案:http://stackoverflow.com/questions/4770993/silent-exceptions- in-python-tkinter-should-i-make-them-louder-how – Gonzo

+0

[我應該在tkinter中聲明無聲的例外嗎?](https://stackoverflow.com/questions/4770993/should-i-make -silent-exceptions-louder-in-tkinter) –

回答

7

請參閱How can I make silent exceptions louder in tkinter的回答,其中顯示如何將回調掛鉤到tkinter.Tk.report_callback_exception

+0

感謝你的幫助,我可以_或多或少地讓它工作。但我並不熟悉@safe語法(新手python程序員),所以我不知道在哪裏把它放在我的代碼中......在我看來,我必須在每個函數定義之前放置@safe被觀看......是這樣嗎? – alessandro

+0

@alessandro:你是對的。這些被稱爲裝飾者。裝飾器是調用可以包裝其他函數的類和函數的語法糖。 –

+0

@StevenRumbalski我故意不改變進口。我只做了與Python 2向後兼容的編輯。 –

5

正如@約亨 - ritzel說(Should I make silent exceptions louder in tkinter?),有tk.TK.report_callback_exception(),你可以重寫:

import traceback 
import tkMessageBox 

# You would normally put that on the App class 
def show_error(self, *args): 
    err = traceback.format_exception(*args) 
    tkMessageBox.showerror('Exception',err) 
# but this works too 
tk.Tk.report_callback_exception = show_error