如何拦截烧瓶中的所有异常?

时间:2013-11-28 05:09:06

标签: python-2.7 configuration exception-handling flask

也许我没有看到documentation中的某些内容。

我想不只是处理一些http错误,而是所有异常。原因 - 我想使用我自己的自定义逻辑记录它们(听起来像重新发明轮子,但我需要完全控制日志记录。我不希望服务器在异常情况下瘫痪,但仅限于特定请求的炸弹

这就是我现在启动Flask的方式。这里app.run启动服务器。每当发生异常时,如何指示它调用我的异常处理程序方法?

def main():
    args = parse_args()
    app.config['PROPAGATE_EXCEPTIONS'] = True
    flask_options = {'port' : args.port}
    if args.host == 'public':
        flask_options['host'] = '0.0.0.0'
    app.run(**flask_options)

if __name__ == '__main__':
    _sys.exit(main())

2 个答案:

答案 0 :(得分:16)

您应该使用errorhandler,请参阅文档http://flask.pocoo.org/docs/patterns/errorpages/#error-handlershttp://flask.pocoo.org/docs/api/#flask.Flask.errorhandler。允许您获取调度程序中引发的所有异常,但不处理错误处理程序中的异常。例如,处理所有异常:

@app.errorhandler(Exception)
def all_exception_handler(error):
   return 'Error', 500

在这种情况下,我更喜欢显式异常处理程序或使用装饰器(基于类的视图)。

答案 1 :(得分:0)

尝试这样的事情:

@app.errorhandler(Exception)
def all_exception_handler(error):

    return "Error: " + error.code