异常处理
HTTP 异常主动抛出
- abort 方法
- 抛出一个给定状态代码的 HTTPException 或者 指定响应,例如想要用一个页面未找到异常来终止请求,你可以调用 abort(404)。
- 参数:
- code – HTTP的错误状态码
# abort(404)
abort(500)
抛出状态码的话,只能抛出 HTTP 协议的错误状态码
示例代码:
from flask import Flask, render_template, abort
app = Flask(__name__)
@app.route('/users/')
def index(user_id):
if user_id < 5:
abort(444)
return render_template('index.html')
app.run()
运行效果:
【这儿abort写成404时,页面会报404的错误,但是服务器不会显示错误信息】 【这儿要写确定的状态码】
捕获错误- errorhandler 装饰器
- 注册一个错误处理程序,当程序抛出指定错误状态码的时候,就会调用该装饰器所装饰的方法
- 参数:
- code_or_exception – HTTP的错误状态码或指定异常
- 例如统一处理状态码为500的错误给用户友好的提示:
@app.errorhandler(500)
def internal_server_error(e):
return '服务器搬家了'
示例代码:
from flask import Flask, render_template, abort
app = Flask(__name__)
@app.route('/users/')
def index(user_id):
if user_id < 5:
abort(500)
return render_template('index.html')
@app.errorhandler(500)
def internal_server_error(e):
print(e)
return '服务器搬家了'
app.run()
运行效果:
- 捕获指定异常
@app.errorhandler(ZeroDivisionError)
def zero_division_error(e):
return '除数不能为0'
示例代码:
from flask import Flask, render_template, abort
app = Flask(__name__)
@app.route('/test')
def index():
9 / 0
return render_template('index.html')
@app.errorhandler(ZeroDivisionError)
def zero_division_error(e):
print(e)
return '除数不能为0'
app.run()
运行效果: