最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在Flask中進(jìn)行異常處理實(shí)例解析

 更新時(shí)間:2023年11月22日 11:23:55   作者:Hunter  
這篇文章主要為大家介紹了如何在Flask中進(jìn)行異常處理實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

在系統(tǒng)運(yùn)行中,有時(shí)候需要處理報(bào)錯(cuò)異常。

異常的來源可能是系統(tǒng)在運(yùn)行中的報(bào)錯(cuò),比如錯(cuò)誤的運(yùn)算的有 1/0 這種等,還有的是訪問了不存在接口,又或者,我們在查驗(yàn)接口參數(shù)的時(shí)候,發(fā)現(xiàn)沒有傳必傳參數(shù),需要手動觸發(fā)一個(gè)報(bào)錯(cuò)等。

這里就介紹如何在 Flask 中進(jìn)行異常處理。

本篇筆記的代碼都已經(jīng)提交到 github 上,可使用下面的操作獲取代碼:

git clone https://github.com/x1204604036/flask_backend.git

1、異常處理示例

這里以請求的接口不存在為示例介紹一下異常處理流程。

處理一個(gè)異常,需要先對指定的異常進(jìn)行注冊,對于請求接口不存在這種請求相關(guān)的異常,F(xiàn)lask 里定義了一個(gè) HTTPException 異常對其進(jìn)行處理

這里我們在 app/ 下創(chuàng)建一個(gè)文件夾 utils,再創(chuàng)建一個(gè)文件 exception_handler.py:

# app/utils/exception_handler.py
from werkzeug.exceptions import HTTPException
from flask import jsonify
def init_error_exception(app):
    @app.errorhandler(HTTPException)
    def handler_http_exception(exception):
        print(exception)
        return jsonify({"code": -1, "msg": exception.description}), exception.code

這里創(chuàng)建了一個(gè)異常處理的函數(shù),通過 @app.errorhandler(HTTPException) 的方式注冊,在 app/__init__.py 中引入:

from flask import Flask
from app.utils.exception_handler import init_error_exception
def create_app():
    app = Flask(__name__)
    init_error_exception(app)
    return app

flask.jsonify 用來返回 json 數(shù)據(jù)給客戶端,后面跟著的是 HTTP 的 status code,就是 200,500 那些表示請求狀態(tài)的的狀態(tài)碼

這里我們用 postman 請求一個(gè)不存在的接口,就可以看到返回的信息如下:

{
    "code": -1,
    "msg": "The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again."
}

status code 是 404,表示接口不存在

這樣,關(guān)于 HTTP 請求的異常處理就從注冊,到觸發(fā),到返回結(jié)果完成了一個(gè)閉環(huán)。

2、其他異常處理

除了上面的請求異常,可能還有一些異常,比如我們在接口里進(jìn)行了 1/0 等不合法的運(yùn)算,為了捕捉這種報(bào)錯(cuò),我們可以如下操作:

ERROR_HTTP_CODE = 417
def init_error_exception(app):
    @app.errorhandler(Exception)
    def server_exception(exception):
        print(exception)
        return jsonify({"code": -1, "msg": "內(nèi)部錯(cuò)誤"}), ERROR_HTTP_CODE

這樣,在系統(tǒng)里發(fā)生異常異常之后,就會被捕捉,返回給客戶端 內(nèi)部錯(cuò)誤 的信息

還有一些時(shí)候,舉個(gè)例子,比如在接口里,客戶端沒有傳來一些必傳的參數(shù),我們可以手動觸發(fā)一個(gè)報(bào)錯(cuò),自定義報(bào)錯(cuò)信息和HTTP狀態(tài)碼,可以如下這樣操作:

class UserException(Exception):
    def __init__(self, code=-1, msg="error", http_code=417):
        self.code = code
        self.msg = msg
        self.http_code = http_code
def init_error_exception(app):
    @app.errorhandler(UserException)
    def user_exception(exception):
        print(exception)
        return jsonify({"code": exception.code, "msg": exception.msg}), exception.http_code

然后我們在接口里這樣調(diào)用觸發(fā)異常:

raise UserException(msg="手動測試error", http_code=417)

我們可以傳入 code,msg 和 http_code 參數(shù),用于返回給前端

以上這些介紹的都是異常的處理,還可以在處理異常的時(shí)候打印日志,用于記錄報(bào)錯(cuò)的信息,這個(gè)我們后面介紹日志的時(shí)候再介紹。

3、代碼總覽

以下給出前面介紹的三種異常處理的代碼:

# app/utils/exception_handler.py
from werkzeug.exceptions import HTTPException
from flask import jsonify
ERROR_HTTP_CODE = 417
class UserException(Exception):
    def __init__(self, code=-1, msg="error", http_code=417):
        self.code = code
        self.msg = msg
        self.http_code = http_code
def init_error_exception(app):
    @app.errorhandler(HTTPException)
    def handler_http_exception(exception):
        print(exception)
        return jsonify({"code": -1, "msg": exception.description}), exception.code
    @app.errorhandler(Exception)
    def server_exception(exception):
        print(exception)
        return jsonify({"code": -1, "msg": "內(nèi)部錯(cuò)誤"}), ERROR_HTTP_CODE
    @app.errorhandler(UserException)
    def user_exception(exception):
        print(exception)
        return jsonify({"code": exception.code, "msg": exception.msg}), exception.http_code

記得要在 app/__init__.py 中引入初始化處理哦

以上就是如何在Flask中進(jìn)行異常處理實(shí)例解析的詳細(xì)內(nèi)容,更多關(guān)于Flask異常處理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python利用PaddleOCR制作個(gè)搜題小工具

    Python利用PaddleOCR制作個(gè)搜題小工具

    PaddleOCR是一個(gè)基于百度飛槳的OCR工具庫,單模型支持中英文數(shù)字組合識別、豎排文本識別、長文本識別。本文將利用PaddleOCR開發(fā)一個(gè)搜題小工具,感興趣的可以了解一下
    2022-06-06
  • Pytorch之ToPILImage()不輸出圖片問題及解決

    Pytorch之ToPILImage()不輸出圖片問題及解決

    這篇文章主要介紹了Pytorch之ToPILImage()不輸出圖片問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 精選39道Python數(shù)據(jù)分析面試題提早備戰(zhàn)金三銀四

    精選39道Python數(shù)據(jù)分析面試題提早備戰(zhàn)金三銀四

    這篇文章主要為大家介紹了39道Python數(shù)據(jù)分析的面試題問答攻略幫助大家提早備戰(zhàn)金三銀四,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多精進(jìn),早日度過寒冬
    2023-12-12
  • 在pycharm中為項(xiàng)目導(dǎo)入anacodna環(huán)境的操作方法

    在pycharm中為項(xiàng)目導(dǎo)入anacodna環(huán)境的操作方法

    這篇文章主要介紹了在pycharm中為項(xiàng)目導(dǎo)入anacodna環(huán)境的操作方法,本文圖文并茂通過實(shí)例詳解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python基于numpy靈活定義神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的方法

    Python基于numpy靈活定義神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的方法

    這篇文章主要介紹了Python基于numpy靈活定義神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的方法,結(jié)合實(shí)例形式分析了神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的原理及Python具體實(shí)現(xiàn)方法,涉及Python使用numpy擴(kuò)展進(jìn)行數(shù)學(xué)運(yùn)算的相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • 淺析python遞歸函數(shù)和河內(nèi)塔問題

    淺析python遞歸函數(shù)和河內(nèi)塔問題

    這篇文章主要介紹了python遞歸函數(shù)和河內(nèi)塔問題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-04-04
  • Numpy數(shù)組的切片索引操作

    Numpy數(shù)組的切片索引操作

    本文主要介紹了Numpy數(shù)組的切片索引操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • python3.4用函數(shù)操作mysql5.7數(shù)據(jù)庫

    python3.4用函數(shù)操作mysql5.7數(shù)據(jù)庫

    這篇文章主要為大家詳細(xì)介紹了python3.4用函數(shù)操作mysql5.7數(shù)據(jù)庫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Python排序算法之冒泡排序

    Python排序算法之冒泡排序

    我們在編寫代碼時(shí),經(jīng)常需要對一些序列做一些排序,排序的方法很多,下面我們講一下常用的冒泡排序法。需要的朋友可以參考下
    2023-01-01
  • Python Django教程之實(shí)現(xiàn)天氣應(yīng)用程序

    Python Django教程之實(shí)現(xiàn)天氣應(yīng)用程序

    Django提供了一個(gè)基于Python Web框架的Web框架,允許快速開發(fā)和干凈,務(wù)實(shí)的設(shè)計(jì)。在本教程中,我們將學(xué)習(xí)如何創(chuàng)建一個(gè)使用Django作為后端的天氣應(yīng)用程序,感興趣的可以嘗試一下
    2022-10-10

最新評論

察哈| 红安县| 余江县| 元江| 池州市| 公安县| 安西县| 金寨县| 嫩江县| 新绛县| 土默特左旗| 绿春县| 清河县| 邢台县| 宜宾市| 黎川县| 根河市| 双柏县| 台前县| 灵寿县| 安西县| 石城县| 丘北县| 华安县| 隆林| 榆中县| 黄平县| 诸暨市| 措勤县| 阆中市| 平陆县| 彭山县| 安国市| 含山县| 广元市| 大余县| 迁安市| 开封县| 探索| 屏山县| 札达县|