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

Leo*_*nid 9 configuration exception-handling flask python-2.7

也许我没有在文档中看到一些东西.

我想不只是处理一些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())
Run Code Online (Sandbox Code Playgroud)

tbi*_*icr 17

您应该使用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
Run Code Online (Sandbox Code Playgroud)

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

  • 这在最近的版本中不再起作用.在0.12我再次获得HTML错误页面. (3认同)