当我使用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,我无法弄清楚这是否是我真正需要的。
答案 0 :(得分:1)
我从master分支安装了最新版本,errors
构造函数有Api
个参数。
现在它在我稍微更改了代码之后返回了正确的异常,正如documentation建议的那样:
errors = {
'InvalidSettings': {
'message': "Something is wrong with your settings",
'status': 400,
}
}
api = restful.Api(app, errors=errors)
但仍有一个问题,也许我错过了文档中的内容。如何从我举起它的地方传递消息?