1. 程式人生 > >flask異常丟擲與捕獲

flask異常丟擲與捕獲

異常丟擲

abort 方法

丟擲一個給定狀態程式碼的 HTTPException 或者 指定響應,例如想要用一個頁面未找到異常來終止請求,你可以呼叫 abort(404)。

引數:code – HTTP的錯誤狀態碼
丟擲狀態碼的話,只能丟擲 HTTP 協議的錯誤狀態碼
from flask import Flask abort

app = Flask(__name__)

@app.route("/")
def index():
    abort(404)  # 丟擲異常
    return 'index page is show'
    
if __name__ == '__main__':
    app.run(debug=True)

捕獲異常

errorhandler 裝飾器

註冊一個錯誤處理程式,當程式丟擲指定錯誤狀態碼的時候,就會呼叫該裝飾器所裝飾的方法

引數:code_or_exception – HTTP的錯誤狀態碼
from flask import Flask
app = Flask(__name__)

@app.errorhandler(404)
def demo1():
    return '您訪問的頁面已經去浪跡天涯了'

if __name__ == '__main__':
    app.run(debug=True)
引數:捕獲指定異常
from flask import Flask

app = Flask(__name__)


@app.route("/")
def index():
    a = 1 / 0   # 除數為零了
    return 'index page is show'


@app.errorhandler(ZeroDivisionError)
def zero_division_error(e):
    return '除數不能為0'


if __name__ == '__main__':
    app.run(debug=True)

在開發時,後臺出現異常 ,但不想把異常顯示給使用者或者要統一處理異常時,可以使用abort主動丟擲異常,再捕獲異常返回美化後的頁面。

from flask import Flask, redirect, url_for, abort

app = Flask(__name__)


@app.route("/")
def index():
    abort(404)  # 丟擲異常
    return 'index page is show'


@app.route('/demo1')
def demo1():
    return '您訪問的頁面已經去浪跡天涯了'


@app.errorhandler(404)  # 捕獲異常
def demo(e):
    return redirect(url_for('demo1'))  # 跳轉到demo1頁面


if __name__ == '__main__':
    app.run(debug=True)