2012-08-03 100 views
0

在Django中,每當發生錯誤,如果我們不保存在try塊中,將會引發錯誤。在那個時間點(錯誤期間),如果它不在try塊中,而不是錯誤頁面,我們可以顯示一個msg。python Django自定義錯誤消息任何錯誤(除了嘗試,除了)

我在說的是,django中有什麼(如信號)在錯誤期間被激活並打印該消息。在我的情況下,這是一個ajax請求,所以我想要的是,當某些內容不在try塊中,並且仍然如果它引發錯誤,那麼它應該至少發送一個錯誤消息(給另一個服務器,它使ajax調用我們的服務器)說「發生錯誤」。

+1

一般而言,您不希望將錯誤消息傳播給用戶,此外,如果引發異常而未被捕獲,自然會停止該進程,因此不會有響應。你可以設置[Sentry](https://github.com/dcramer/sentry/)來捕捉你的例外;這是監視錯誤和日誌等的好方法。 – 2012-08-03 13:19:12

回答

0

在Django中,如果發生錯誤,它實際上不是自動傳播給用戶。相反,如果發生錯誤,它將返回一個500錯誤頁面。如果Django處於調試模式,它將回溯。如果其他服務器是智能的,則會意識到存在500錯誤消息而不是200消息。在Django中,您可以在根目錄中定義一個「500.html」來處理錯誤(或使用默認的Django模板)。 GLHF

0

據我所知,沒有辦法全局覆蓋Python中的默認異常處理。您可以使用try/except塊來捕獲錯誤,執行一些代碼,然後重新引發異常。

將代碼放在try區塊中,並在except區塊中打印您的消息,然後致電raise重新引發捕獲的異常。

例:

try: 
    raise Exception("This is an exception") 
except Exception: 
    print ("Exception raised, notify server") 
    #re-raise exception 
    raise 

這將打印出類似這樣:

Exception raised, notify server 
Traceback (most recent call last): 
    File "[file]", line [line], in [module] 
Exception: This is an exception 
+0

實際上有。如果你想捕捉所有的異常,試試看,除了圍繞你所有的代碼(或者包含所有代碼的函數)。 – 2012-08-03 16:33:43

+0

好吧,但是你失去了提供特定錯誤信息的能力,因爲你會有優雅的恢復不知道代碼發生異常的地方。 – pR0Ps 2012-08-07 14:11:57