博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask中实现统一异常处理
阅读量:7079 次
发布时间:2019-06-28

本文共 1487 字,大约阅读时间需要 4 分钟。

hot3.png

写JavaEE项目多了,形成了一定的流程样式,异常处理也是很重要的环节。

现在开始写python,相信肯定有一样的实现。没错,flask有这样的功能。

创建一个Flask项目后,默认的情况下,可以在app上注册errorhandler错误处理器,如:

@app.errorhandler(InvalidUsage)def handle_invalid_usage(error):    response = jsonify(error.to_dict())    response.status_code = error.status_code    return response

可以看出,这个errorhandler处理器注册在app上,只能对app使用。

那么,问题来了,在一个项目中,单一的app局限性太强了,肯定要分各种模块蓝本,那么,每个模块蓝本该怎么使用统一的errorhandler呢?

首先,可以先开发一个公共模块蓝本,例如common

from flask import Blueprint, jsonifycbp = Blueprint('common', __name__)

然后,在common模块蓝本中添加自定义异常处理类:

class InvalidUsage(Exception):    status_code = 400    def __init__(self, message, status_code=None, payload=None):        Exception.__init__(self)        self.message = message        if status_code is not None:            self.status_code = status_code        self.payload = payload    def to_dict(self):        rv = dict(self.payload or ())        rv['message'] = self.message        return rv

接下来就是重点了,要把整个项目中所有web的异常统一处理了。

@cbp.app_errorhandler(InvalidUsage)def handle_invalid_usage(error):    response = jsonify(error.to_dict())    response.status_code = error.status_code    return response

看出与前面的那个errorhandler有什么不同了吗?主要是注解那里,使用了cbp的蓝本,注册到全局的errorhandler方式是app_errorhandler。

至此,全局的就可以这么实现了。

如何使用呢?

首先,要在使用的地方引入异常类

from common import InvalidUsage

然后在代码中抛出这个异常:

@app.route('/')def hello_world():    if True:        raise InvalidUsage('This view is gone', status_code=410)    return 'Hello World!'

这样就OK了

转载于:https://my.oschina.net/OHC1U9jZt/blog/3027727

你可能感兴趣的文章
rpm -qa 查找文件
查看>>
Linux文件管理相关命令
查看>>
C#中按指定质量保存图片的实例代码 24位深度
查看>>
实现winfrom进度条及进度信息提示,winfrom程序假死处理
查看>>
php 面向对象上课笔记
查看>>
php echo、print、print_r、printf、sprintf、var_dump的区别比较
查看>>
开发小程序随笔
查看>>
【Oracle】在WIN NT 64位环境下安装win64_11gR2_database。并用PL/SQL连接
查看>>
CentOS切换桌面模式和命令行模式
查看>>
noip2013火柴排序
查看>>
固定GridView的头
查看>>
ElasticSearch 监控单个节点详解
查看>>
微软职位内部推荐-Senior Development Lead
查看>>
parent对象
查看>>
三位老师
查看>>
写给测试人员:不是所有的bug都需要修复
查看>>
【转】万亿移动支付产业的难点和痛点
查看>>
C2 CompilerThread0 如果抓到的java线程dump里占用CPU最高的线程是这个,99%可能是因为服务重启了...
查看>>
log4j2配置
查看>>
hadoop学习笔记411
查看>>