生产中未调用错误处理程序

时间:2014-07-22 15:52:42

标签: python flask flask-restful

当我使用Flask开发服务器并引发异常时,我得到正确的错误代码和我的自定义错误消息。但是这在生产环境中不起作用(我使用lighttpd和fcgi),我在那里得到500错误。

以下是我的例外情况:

class InvalidSettings(Exception):
    status_code = 400

    def __init__(self, message, status_code=None, payload=None):
        super(InvalidSettings, self).__init__()
        self.message = message
        if status_code is not None:
            self.status_code = status_code
        self.payload = payload

    def to_dict(self):
        rv = dict(self.payload or ())
        rv['message'] = self.message
        return rv

这里是错误处理程序代码:

@app.errorhandler(InvalidSettings)
def handle_invalid_settings(error):
    response = json.dumps(error.to_dict())
    response.status_code = error.status_code
    return response

更新

我尝试使用custom error messages,但我得到例外:

TypeError: __init__() got an unexpected keyword argument 'errors'

这是真的,在Flask-RESTful的Api构造函数中没有这样的东西。这很奇怪,因为它是0.2.1版本的文档,正如我在pip中看到的那样,我的版本是0.2.12。 Hovewer,我无法弄清楚这是否是我真正需要的。

1 个答案:

答案 0 :(得分:1)

我从master分支安装了最新版本,errors构造函数有Api个参数。

现在它在我稍微更改了代码之后返回了正确的异常,正如documentation建议的那样:

errors = {
    'InvalidSettings': {
        'message': "Something is wrong with your settings",
        'status': 400,
    }
}
api = restful.Api(app, errors=errors)

但仍有一个问题,也许我错过了文档中的内容。如何从我举起它的地方传递消息?