目录

  1. 什么是错误处理
  2. 基本错误处理
  3. 自定义错误页面
  4. 使用 abort 抛出错误
  5. 全局错误处理
  6. 参考资料

什么是错误处理

在 Flask 中,错误处理是指捕获应用运行时发生的异常或 HTTP 错误(如 404、500 等),并返回用户友好的响应。Flask 提供了内置工具来定义错误处理程序,从而提升用户体验和调试效率。


基本错误处理

Flask 允许使用 @app.errorhandler 装饰器为特定错误代码定义处理函数。

示例

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return '首页'

@app.errorhandler(404)
def not_found(error):
    return '页面不存在!', 404

if __name__ == '__main__':
    app.run(debug=True)
  • 解释
  • @app.errorhandler(404):处理 404 错误(页面未找到)。
  • 访问不存在的路径(如 /wrong)将返回 “页面不存在!”。

自定义错误页面

可以通过模板渲染自定义错误页面,提升用户体验。

示例

项目结构

my_app/
├── app.py
└── templates/
    └── 404.html
  1. app.py
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return '首页'

@app.errorhandler(404)
def not_found(error):
    return render_template('404.html'), 404

if __name__ == '__main__':
    app.run(debug=True)
  1. templates/404.html
<!DOCTYPE html>
<html>
<head>
    <title>404 - 未找到</title>
</head>
<body>
    <h1>404</h1>
    <p>抱歉,我们找不到这个页面。</p>
    <a href="/">返回首页</a>
</body>
</html>
</xaiArtifact>

- **解释**:
  - `render_template('404.html')`:渲染自定义 404 页面。
  - 返回元组 `(响应, 状态码)`。

---

### 使用 abort 抛出错误
`abort` 函数可以主动抛出 HTTP 错误,触发相应的错误处理程序。

#### 示例

python
from flask import Flask, abort, render_template

app = Flask(name)

@app.route(‘/admin’)
def admin():
abort(403) # 抛出 403 错误

@app.errorhandler(403)
def forbidden(error):
return render_template(‘403.html’), 403

if name == ‘main‘:
app.run(debug=True)

templates/403.html

<!DOCTYPE html>
<html>
<head>
    <title>403 - 禁止访问</title>
</head>
<body>
    <h1>403</h1>
    <p>您无权访问此页面。</p>
    <a href="/">返回首页</a>
</body>
</html>
  • 解释
  • abort(403):抛出 403 错误(禁止访问)。
  • @app.errorhandler(403):捕获并处理该错误。

全局错误处理

可以定义一个通用的错误处理程序,捕获所有未明确处理的异常。

示例

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/error')
def cause_error():
    raise Exception("这是一个测试错误")

@app.errorhandler(Exception)
def handle_exception(error):
    return render_template('500.html', error=error), 500

@app.errorhandler(404)
def not_found(error):
    return render_template('404.html'), 404

if __name__ == '__main__':
    app.run(debug=True)
</xaiArtifact>

**`templates/500.html`**

html

500 – 服务器错误

500

服务器发生错误:{{ error }}返回首页

  • 解释
  • @app.errorhandler(Exception):捕获所有未处理的异常。
  • error 参数:传递异常信息到模板。

参考资料


错误处理是提升 Flask 应用健壮性的关键。如果需要更复杂的错误处理逻辑(例如日志记录或蓝图中的错误处理),请告诉我!