簡體   English   中英

Flask-Restful在非調試模式下接受Flask的異常處理

[英]Flask-Restful taking over exception handling from Flask during non debug mode

我在開發期間使用了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的Api.handle_error並自己實現這個邏輯,但我想首先使用現有的API ...

簡而言之,我的解決方案就是創建一個Api子類,將其修改為僅處理HTTPException類型的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是一個糟糕的設計決策,原因有幾個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM