Python学习之Flask全局异常处理流程_flask 异常处理-CSDN博客
读取文件错误 OSError: [Errno 22] Invalid argument:_[errno 22] invalid argument: '..\\data\\snli_1.0\\-CSDN博客
异常触发
assert触发异常: 在Python中,使用assert语句可以检查某个条件是否为真,如果条件为假,则会触发AssertionError异常。在Flask中,可以利用assert语句进行请求参数的校验。
raise触发异常: 在Python中,使用raise语句可以显式地触发特定的异常。在Flask应用程序中,我们可以根据需要触发不同类型的异常来处理业务逻辑。
abort触发异常: 在Flask中,可以使用abort函数手动触发HTTP错误。abort函数默认触发一个HTTPException异常。
主动抛出HTTP异常
from flask import Flask, request, abort
app = Flask(__name__)
@app.route("/")
def index():
password = request.args.get("password")
if password != "123456":
# 主动抛出异常!
# abort的第一个参数:表示本次抛出的HTTP异常状态码,后续其他参数,表示错误相关的提示内容。
abort(400)
return "ok"
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000, debug=True)
abort,只能抛出 HTTP 协议的错误状态码,一般用于权限等页面上错误的展示提示. abort 在有些前后端分离的项目里面不会被使用,往往在业务错误的时候使用raise进行抛出错误类型,而不是抛出http异常。
捕获异常
@app.errorhandler的参数是异常类型或者HTTP状态码
在Flask应用程序中,通过@app.errorhandler装饰器将异常类型与处理函数绑定。这样做的目的是在应用程序运行过程中捕获特定类型的异常,并进行适当的处理。可以为不同的HTTP状态码或其他异常类型注册相应的处理函数。
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":
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)
刚进去主页面会显示这个,也就是raise函数发挥了作用
这里就是常见的404报错现场,没有找到对应的页面