[flask]异常抛出和捕获异常

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异常
python 复制代码
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状态码或其他异常类型注册相应的处理函数。

python 复制代码
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报错现场,没有找到对应的页面

总结

1、注册处理函数,将特定类型的异常与相应的处理函数绑定。
2、在应用程序执行过程中,如果发生异常,Flask会寻找匹配的异常处理函数。
3、匹配到异常处理函数后,控制权转移到异常处理函数,并执行相应的处理逻辑。
5、异常处理函数可以根据需要进行自定义的异常信息返回、日志记录或其他操作。
6、处理完异常后,Flask会返回相应的错误响应给客户端。

相关推荐
xxxcq3 分钟前
Go微服务网关开发(1)--概念介绍
后端
AI小云6 分钟前
【Python与AI基础】Python编程基础:模块和包
人工智能·python
golang学习记7 分钟前
Python 3.14 正式发布:七大重磅新特性详解
后端
用户40993225021217 分钟前
PostgreSQL里的子查询和CTE居然在性能上“掐架”?到底该站哪边?
后端·ai编程·trae
xxxcq18 分钟前
Go微服务网关开发(2):路由转发功能的实现
后端
努力努力再努力wz20 分钟前
【C++进阶系列】:万字详解智能指针(附模拟实现的源码)
java·linux·c语言·开发语言·数据结构·c++·python
小蕾Java1 小时前
Python详细安装教程(附PyCharm使用)
开发语言·python·pycharm
IT_陈寒1 小时前
Python性能优化:用这5个鲜为人知的内置函数让你的代码提速50%
前端·人工智能·后端
weixin_307779131 小时前
使用AWS IAM和Python自动化权限策略分析与导出
开发语言·python·自动化·云计算·aws
她说彩礼65万1 小时前
ASP.NET Core 应用程序启动机制 宿主概念
后端·asp.net