【问题标题】:Flask/Python: Error Handlers for User Defined ExceptionsFlask/Python:用户定义异常的错误处理程序
【发布时间】:2018-10-23 23:15:35
【问题描述】:

我有一个使用 Flask/Python 制作的简单 Web 应用程序。我有一个用户定义的异常,我用它来尝试在我的代码中捕获异常。但是,我想为我的用户定义的异常显示一个自定义错误页面。在 Flask 中,我读到您必须使用 @errorhandler 装饰器。

我读过的很多例子都是这样的:

@app.errorhandler(Exception)
#some code

我的问题是,@app.errorhandler 之后的括号中具体是什么?您是否传入您定义的异常类的名称?我在网上阅读的所有示例都没有真正说明括号之间的内容,所以我想知道在括号中传递什么异常。

【问题讨论】:

标签: python flask exception-handling


【解决方案1】:

errorhandler 的参数是您的用户定义的异常。在处理程序中,您可以返回任何您想要的内容,其中包括一个模板。例如:

from flask import render_template

class MyCustomException(Exception):
    pass

@app.errorhandler(MyCustomException)
def custom_handler(e):
    return render_template('my_custom_error_page.html')

在这种情况下,无论何时引发MyCustomException,应用程序都会返回html页面my_custom_error_page.html

你可以测试这个强制异常发生。例如:

@app.route('/test_exception')
def test_exception():
    raise MyCustomException('just testing :)')

【讨论】:

  • 在我的 Flask 应用程序的路由处理程序中,我使用 try-except 块来捕获任何异常。但是,我实际上在我的 Python 代码中引发了与包含路由处理程序代码的文件分开的异常。即使在“try-except”块中捕获了异常,您如何才能显示该异常的自定义错误页面?你会再次提出异常吗?
  • 如果您捕捉到异常,它不会引发,因此不会显示自定义页面。如果您希望它在带有try-except 块的情况下也能显示,只需在except 块中添加这一行:raise
猜你喜欢
  • 2011-08-19
  • 2013-11-03
  • 2016-09-10
  • 2023-03-07
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多