2017-07-29 53 views
2

提出的如何處理異常考慮你有這樣的代碼瓶API:除外條款

@app.route('/doing/foo') 
def foo(): 
try: 
     ... 
except Exception as ex: 
    doing some stuff 

現在doing some stuff意外拋出另一個異常。如何防止服務器顯示另一個通用的內部服務器錯誤,而不知道發生了什麼?
換句話說,我如何捕獲可能源於except clause的異常?

+3

另一個'try:'。 – jonrsharpe

+0

我可以添加無限的try子句;) – JavaSa

回答

2

啊哈!這是一個100年的問題。

第一種選擇是移動到Python 3

Python 3只有異常鏈,將打印兩個例外 - 被處理的人;這是由於甩在處理不當的人。

第二種選擇是自己實現異常鏈:

手動注入新的異常到使用當前except:內的另一個try-except條款正在處理的一個。

請記住它引起循環引用。由於這是一次性例外,所以我不打算處理它。進一步使用此方法將需要使用traceback.clear_frames()清除回溯。

2

在請求處理程序中,記錄錯誤並返回一個HTTP 500錯誤和一些HTML,指出發生了「內部錯誤」,並且包含回到某個安全點的鏈接,以便用戶重新啓動他們正在執行的任何操作。

您可以嘗試捕捉更具體的異常(從最具體和最常見的對異常(這是最普通的一般例外的),你也可以嘗試內省異常/回溯對象(除權在你的例子中)

大多數情況下你只是想確保你不會通過瀏覽器向用戶顯示內部應用程序狀態(可能的安全隱患),並且你不會簡單地將用戶請求放在地板上。