主动抛出HTTP异常
-
abort 方法
-
抛出一个给定状态代码的 HTTPException 或者 指定响应,例如想要用一个页面未找到异常来终止请求,你可以调用 abort(404)
-
-
参数:
-
code – HTTP的错误状态码
-
from flask import Flask,abort,request
app = Flask(import_name=__name__)
# 配置类
class Config(object):
DEBUG = True # 开启调试模式
# 加载配置
app.config.from_object(Config)
@app.route("/")
def index():
# try:
# 1/0
# except:
# abort(500)
username = request.args.get("username")
if username is None:
abort(400)
return "ok"
if __name__ == '__main__':
app.run()


abort,只能抛出 HTTP 协议的错误状态码,一般用于权限等页面上错误的展示提示.
abort 在有些前后端分离的项目里面不会被使用,往往在业务错误的时候使用raise进行抛出错误类型,而不是抛出http异常。
捕获错误
-
app.errorhandler 装饰器
-
注册一个错误处理程序,当程序抛出指定错误状态码的时候,就会调用该装饰器所装饰的方法
-
-
参数:
-
code_or_exception – HTTP的错误状态码或指定异常
-
-
例如统一处理状态码为500的错误给用户友好的提示:
@app.errorhandler(500)
def internal_server_error(e):
return '服务器搬家了'
- 捕获指定异常类型
@app.errorhandler(ZeroDivisionError)
def zero_division_error(e):
return '除数不能为0'
示例:
from flask import Flask, request, abort
app = Flask(__name__)
class NetWorkError(Exception):
pass
@app.route("/")
def index():
password = request.args.get("password")
if password != "123456":
# 主动抛出HTTP异常!
# abort的第一个参数:表示本次抛出的HTTP异常状态码,后续其他参数,表示错误相关的提示内容。
# abort(400, "密码错误!")
raise NetWorkError("网络请求出错!")
# print(hello)
return "ok"
# @app.errorhandler的参数是异常类型或者HTTP状态码
@app.errorhandler(NameError)
def NameErrorFunc(exc):
"""
针对变量命名的异常处理
:param exc:
:return:
"""
print(exc.__traceback__)
return {"error": f"{exc}"}
@app.errorhandler(400)
def error_400(exc, *args, **kwargs):
print(exc.__traceback__)
print(exc.code) # 上面abort传递的错误状态码
print(exc.description) # 上面abort传递的错误描述
return {"error": f"{exc.description}"}
@app.errorhandler(404)
def error_404(exc):
print(exc.code) # 上面abort传递的错误状态码
print(exc.description) # 上面abort传递的错误描述
return {"error": "当前页面不存在!"}
@app.errorhandler(NetWorkError)
def network_error(exc):
return {"error": f"{exc}"}
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000, debug=True)
4123

被折叠的 条评论
为什么被折叠?



