2016-03-18 25 views
2

我在開發過程中使用Flask的異常處理(@app.errorhander(MyException)),即使Flask-Restful端點異常也能正常工作。然而,我注意到當切換到debug=False時,Flask-Restful正在完全接管異常處理(因爲propagate_exceptions也是False)。我喜歡Flask-Restful爲所有未處理的異常發送內部服務器錯誤,但不幸的是,對於那些具有Flask異常處理程序的人(當這些異常來自Flask-Restful端點時)也會發生這種情況。Flask-Restful在非調試模式下接管Flask的異常處理

有沒有辦法告訴Flask-Restful只處理Flask錯誤處理程序無法處理的異常?如果沒有,我可以排除Flask-Restful處理的某些異常類型,這樣它們就可以被Flask處理了嗎?

我的最後一個選項是覆蓋瓶的RESTful的Api.handle_error和實現這個邏輯我自己,但我想先利用現有的API ...

+0

你能分享你的解決方案嗎? – jpmorin

回答

0

總之我的解決方案僅僅是創建一個子類的Api修改它只處理HTTPException類型的異常。

from flask_restful import Api as _Api 
from werkzeug.exceptions import HTTPException 

class Api(_Api): 
    def error_router(self, original_handler, e): 
     """ Override original error_router to only handle HTTPExceptions. """ 
     if self._has_fr_route() and isinstance(e, HTTPException): 
      try: 
       return self.handle_error(e) 
      except Exception: 
       pass # Fall through to original handler 
     return original_handler(e) 

這麼說,我想重寫app.handle_user_exceptionapp.handle_exception是擺在首位的幾個原因一個不好的設計決策。