当服务发生错误时,可以给前端返回我们想要返回的内容,这样在用户角度看起来体验就更友好。
1.对于不可预知的错误:
@app.errorhandler()
from flask import Flask, render_template
app = Flask(__name__)
@app.errorhandler(500)
def server_error(error):
return '正在升级,请耐心等待'
# return render_template('index.html')
# app.register_error_handler(500,server_error)
@app.route('/login')
def login():
1/0 # 1/0 会触发服务500的错误,通过上面的errorhandler处理500错误。
return 'login page'
if __name__ == '__main__':
app.run(debug=True, port=6000)
2.对于可预知的错误:
abort():抛出指定的异常。
from flask import Flask, render_template, request,abort
app = Flask(__name__)
@app.errorhandler(404)
def server_error(error):
return '未授权'
# return render_template('index.html')
# app.register_error_handler(404,server_error)
@app.route('/login')
def login():
if not request.args.get('username'):
abort(404) # abort:如果有异常就抛出异常
return 'login page'
if __name__ == '__main__':
app.run(debug=True, port=6000)
3.raise自定义抛出异常
UserError(Exception):自定义异常类时需要继承Exception类。
from flask import Flask, render_template, request
app = Flask(__name__)
class UserError(Exception): # 自定义异常需要继承Exception类
pass
@app.errorhandler(UserError)
def server_error(error):
return render_template('user_error.html', error=error), 401
# app.register_error_handler(404,server_error)
@app.route('/login')
def login():
if not request.args.get('username'):
raise UserError() # abort:如果有异常就抛出异常
return 'login page'
if __name__ == '__main__':
app.run(debug=True, port=6000)