前言
今天简单介绍一哈flask中对于异常处理的办法,算是属于表较冷门的知识点了,因为我们用python的知识来实现这些需求处理,但我们还是要学习一下,因为他可以帮我们集中处理异常,而不用在每个视图中进行异常处理。
HTTP异常主动抛出
- abort方法
抛出一个给定状态代码的HTTPException或者指定响应,例如想要用一个页面未找到异常来终止请求,你可以调用abort(404) - 参数
code-HTTP的错误状态码。只能抛出http协议的错误代码。
#导入Flask类和request对象
from flask import Flask,request,abort
app = Flask(__name__)
@app.route('/articles')
def get_articles():
channel_id = request.args.get('channel_id')
if channel_id is None:
abort(400) #400 Bad Request
return 'you want get articles of channel {}'.format(channel_id)
# Flask应用程序的run方法启动web服务器
if __name__ == '__main__':
app.run(port=8000)
捕获错误
- errorhandler装饰器
注册一个错误处理程序,当程序抛出指定错误状态码的时候,就会调用该装饰器所装饰的方法。
- 参数
code_or_exception - HTTP的错误状态码或指定异常。
- 例如统一处理状态码为500的错误给用户有好的提示。
@app.errorhandler(500)
def internal_server_err(e):
return "服务器搬家了"
- 捕获指定异常
@app.errorhandler(ZeroDivisionError)
def zero_division_err(e):
return "除数不能为零"
例:
#导入Flask类
from flask import Flask
app = Flask(__name__)
@app.errorhandler(ZeroDivisionError)
def zero_division_err(e):
# 这里的e是异常对象
print(e)
return "除数不能为零"
@app.route("/")
def index():
s = 1/0
return s
# Flask应用程序的run方法启动web服务器
if __name__ == '__main__':
app.run(port=8000)