“只想记录,不想改变原来的显示结果。是否有方法返回原始默认值”
原生的 errorhandler 装饰器,貌似满足不了你的想法(PS:你这个 ‘原来的显示结果’ 很难理解‘,你是指 flask 原有的异常页面还是啥)
errorhandler 源码解析参考:https://www.jianshu.com/p/5d4017b71eb2
方案:
1、封装一个属于你自己的 errorhandler
2、不采用全局异常处理, 将异常处理分摊到每个视图函数
# 以下是目前 errorhandler ,比较完美的使用方案了
https://www.cnblogs.com/luyuze95/p/12937704.html
@app.errorhandler(Exception)
def framework_error(e):
api_logger.error("error info: %s" % e) # 对错误进行日志记录
if isinstance(e, APIException):
return e
if isinstance(e, HTTPException):
code = e.code
msg = e.description
error_code = 1007
return APIException(msg, code, error_code)
else:
if not app.config['DEBUG']:
return ServerError()
else:
return e
您好,原来的显示结果是指,当debug=False时,显示flask原生404、500页面,当debug=True时,500显示异常跟踪调试页面,总之不能返回任何自定义的东西。接手一个庞大的项目,我本来不是做这块的,所以不能改原来的代码。由于项目使用了flask_restplus,重写了flask原生异常处理机制,原生app.logger也不会自动记录异常。你这个代码最后一行是错误的。返回值只能是string, dict, tuple, Response instance,你返e直接报TypeError了
@不识少年愁:
”当debug=True时,500显示异常跟踪调试页面“ 不要搞这些东西了;测试环境有吧,去研究一下 rpdb ,比你折腾调试页面方便很多
@韆: 不是我想用什么就用什么,得看领导要求。目前return app.handle_exception(e),所有异常页面都正常,但不知道会不会有什么隐患。
@app.errorhandler(Exception)
def exceptions(e):
if isinstance(e, HTTPException):
return e
logger.exception(e)
if not app.debug:
return InternalServerError()
else:
return app.handle_exception(e)