首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无效路由不会被@app.errorhandler捕获(异常)在烧瓶中

无效路由不会被@app.errorhandler捕获(异常)在烧瓶中
EN

Stack Overflow用户
提问于 2015-07-20 10:33:15
回答 1查看 1.4K关注 0票数 4

下面的代码捕获Not Found异常:

代码语言:javascript
复制
@app.errorhandler(404) 
def default_handler(e):
    return 'not-found', 404

问题是,当我使用通用errorhandler时,它无法捕获404错误:

代码语言:javascript
复制
@app.errorhandler(Exception)
def default_handler(e):
    return 'server-error', 500

目前,我使用错误处理程序,一个用于404,另一个用于其他错误。为什么Not Found异常不会被第二个异常捕获?有没有办法使用一个errorhandler

编辑:

路由由flask-restful@app.route()处理。flask-restful用于处理资源,@app.route()用于不适用于资源的人。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-23 16:47:23

我假设您只是将app对象的Api对象传递给Api构造函数。

但是,您可以在构造器中添加另一个参数,称为catch_all_404s,它接受一个bool

从这里开始

代码语言:javascript
复制
api = Api(app, catch_all_404s=True)

这将使404错误路由到您的handle_error()方法。

即使这样做了,如果它不以您的方式处理错误,也可以子类Api。从这里开始

代码语言:javascript
复制
class MyApi(Api):
    def handle_error(self, e):
        """ Overrides the handle_error() method of the Api and adds custom error handling
        :param e: error object
        """
        code = getattr(e, 'code', 500)  # Gets code or defaults to 500
        if code == 404:
            return self.make_response({
                'message': 'not-found',
                'code': 404
            }, 404)
    return super(MyApi, self).handle_error(e)  # handle others the default way

然后,您可以使用api对象而不是Api对象初始化您的Api对象。

像这样,

代码语言:javascript
复制
api = MyApi(app, catch_all_404s=True)

如果这有用的话请告诉我。这是我对堆栈溢出的第一个回答。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31514257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档