目录
什么是错误处理
在 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
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)
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 官方文档 – Error Handling – 错误处理官方指南。
- [Real Python – Flask 错误处理](https://realpython.com/flask-by-example-part-1-project vegetable-setup/#handling-errors) – 错误处理的实践教程。
- Flask API – abort –
abort
函数用法。 - Miguel Grinberg – Flask Mega-Tutorial – 深入错误处理示例。
错误处理是提升 Flask 应用健壮性的关键。如果需要更复杂的错误处理逻辑(例如日志记录或蓝图中的错误处理),请告诉我!
发表回复