91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么處理程序錯誤

發布時間:2021-10-15 14:09:35 來源:億速云 閱讀:154 作者:iii 欄目:編程語言

本篇內容主要講解“怎么處理程序錯誤”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么處理程序錯誤”吧!

1

程序錯誤類型

1.1

語法錯誤

語法錯誤是因為源程序中不正確的代碼產生的,即在編寫程序時沒有遵守語法(或詞法)規則,書寫了錯誤的語法代碼,從而導致編譯器無法正確解釋源代碼而產生的錯誤,通常是由于錄入的錯誤引起的,它在詞法分析或語法分析時檢測出來。如“非法字符”、“括號不匹配”、“缺少;”之類的錯誤。

1.2

語義錯誤

語義錯誤是指源程序中不符合語義規則的錯誤,即一條語句試圖執行一條不可能執行的操作而產生的錯誤。語義錯誤有的在語義分析時檢測處來,有的在運行時才能檢測出來。如變量聲明錯誤、作用域錯誤、數據存儲區的溢出等錯誤。

1.3

邏輯錯誤

邏輯錯誤是指程序的運行結果和程序員的設想有出入時產生的錯誤。這類錯誤并不直接導致程序在編譯期間和運行期間出現錯誤,但是程序未按預期方式執行,產生了不正確的運行結果,較難發現。這種錯誤只能通過分析結果,將結果與設計方案進行對比來發現。

2

HTTPException

我們用 HTTPException 模塊返回帶錯誤信息的 Response。HTTPException 是一個普通的 Python 異常,同時帶有與 API 訪問有關的附加數據。

from fastapi import FastAPI, HTTPException
app = FastAPI()
items = {"book": "Learn Python"}

@app.get("/items/{item_id}")async def read_item(item_id: str):    if item_id not in items:
       raise HTTPException(status_code=404, detail="Item not found")
   return {"item": items[item_id]}

3

添加自定義頭信息

有時候針對 HTTP 錯誤,在一些場景下,我們需要添加自定義頭信息

from fastapi import FastAPI, HTTPException
app = FastAPI()
items = {"book": "Learn Python"}

@app.get("/items-header/{item_id}")async def read_item_header(item_id: str):    if item_id not in items:        raise HTTPException(            status_code=404,            detail="Item not found",            headers={"X-Error": "error info"},
       )    return {"item": items[item_id]}

4

自定義異常處理器

在 fastapi 中借助 the same exception utilities from Starlette,我們可以添加自定義異常處理器。假設我們有個自定義異常 UnicornException,我們想在全局范圍內處理這個異常。借助 @app.exception_handler(),就可以實現我們的目標。


from fastapi import FastAPI, Requestfrom fastapi.responses import JSONResponse
class UnicornException(Exception):    def __init__(self, name: str):        self.name = name
app = FastAPI()
@app.exception_handler(UnicornException)async def unicorn_exception_handler(request: Request, exc: UnicornException):
   return JSONResponse(        status_code=418,        content={"message": f"Oops! {exc.name} did something. error"},    )
@app.get("/get_name_info/{name}")async def read_unicorn(name: str):    if name == "haishiniu":        raise UnicornException(name=name)
   return {"name": name}

5

重寫缺省異常處理器

fastapi 有一些缺省的異常處理器。當我們拋出 HTTPException 異常或者當請求有非法數據的時候,這些處理器負責返回默認的 JSON 結果。我們可以重寫這些異常處理器。

5.1

重寫請求校驗異常處理器

當一個請求包含非法數據的時候,fastapi 內部會拋出 RequestValidationError 異常,并且有默認的異常處理器來處理。我們可以用 @app.exception_handler(RequestValidationError) 來重寫這個異常處理器。


from fastapi import FastAPI, HTTPExceptionfrom fastapi.exceptions import RequestValidationErrorfrom fastapi.responses import PlainTextResponsefrom starlette.exceptions import HTTPException as StarletteHTTPException
app = FastAPI()
@app.exception_handler(StarletteHTTPException)async def http_exception_handler(request, exc):    return PlainTextResponse(str(exc.detail), status_code=exc.status_code)

@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request, exc):    return PlainTextResponse(str(exc), status_code=400)

@app.get("/items/{item_id}")async def read_item(item_id: int):    if item_id == 3:        raise HTTPException(status_code=418, detail="Nope! I don't like 3.")    return {"item_id": item_id}

5.2

重寫 HTTPException 異常處理器

同樣的方法,我們可以重寫 HTTPException 異常處理器。例如,你可能想返回純文本格式而不是 JSON 格式的錯誤信息。

from fastapi import FastAPI, HTTPExceptionfrom fastapi.exceptions import RequestValidationErrorfrom fastapi.responses import PlainTextResponsefrom starlette.exceptions import HTTPException as StarletteHTTPException
app = FastAPI()
@app.exception_handler(StarletteHTTPException)
async def http_exception_handler(request, exc):
   return PlainTextResponse(str(exc.detail), status_code=exc.status_code)
@app.exception_handler(RequestValidationError)async def validation_exception_handler(request, exc):    return PlainTextResponse(str(exc), status_code=400)

@app.get("/items/{item_id}")async def read_item(item_id: int):    if item_id == 3:
       raise HTTPException(status_code=418, detail="Nope! I don't like 3.")
   return {"item_id": item_id}

5.3

重用缺省異常處理器

我們可以導入并且重用缺省的異常處理器。我們從 fastapi.exception_handlers 導入缺省異常處理器。

from fastapi import FastAPI, HTTPExceptionfrom fastapi.exception_handlers import (    http_exception_handler,    request_validation_exception_handler,)
from fastapi.exceptions import RequestValidationErrorfrom starlette.exceptions import HTTPException as StarletteHTTPException
app = FastAPI()
@app.exception_handler(StarletteHTTPException)async def custom_http_exception_handler(request, exc):    print(f"OMG! An HTTP error!: {repr(exc)}")    return await http_exception_handler(request, exc)

@app.exception_handler(RequestValidationError)async def validation_exception_handler(request, exc):    print(f"OMG! The client sent invalid data!: {exc}")    return await request_validation_exception_handler(request, exc)


@app.get("/items/{item_id}")async def read_item(item_id: int):    if item_id == 3:        raise HTTPException(status_code=418, detail="Nope! I don't like 3.")    return {"item_id": item_id}

在示例中,我們在拋出異常之前添加了一條日志輸出。我們可以根據業務需求靈活的重用缺省異常處理器。

6

fastapi HTTPException 對比 Starlette HTTPException

fastapi 中 HTTPException 繼承自 Starlette 的 HTTPException。
唯一的區別 fastapi 中 HTTPException 允許你在 response 添加頭信息。主要在內部用于 OAuth 2.0 以及一些安全相關的功能。
因此,通常我們在代碼中拋出 fastapi 的 HTTPException 異常。但是,當我們注冊異常處理器的時候,我們應該注冊為 Starlette 的 HTTPException。這樣,當 Starlette 的內部代碼或者 Starlette 擴展插件拋出 Starlette HTTPException 時,我們的處理器才能正常捕獲和處理這個異常。如果我們要在代碼中同時使用這兩個類,為了避免命名沖突,我們可以重命名其中一個類。

到此,相信大家對“怎么處理程序錯誤”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新野县| 咸阳市| 合江县| 南安市| 谷城县| 栖霞市| 五原县| 邢台县| 新田县| 鸡泽县| 双峰县| 卓资县| 盐亭县| 石景山区| 东源县| 阿拉善左旗| 正安县| 勃利县| 双流县| 江川县| 读书| 托克逊县| 宁城县| 长乐市| 黑山县| 潜山县| 长兴县| 阜平县| 安图县| 乌什县| 韶关市| 无为县| 尉犁县| 大悟县| 密云县| 金阳县| 鄂托克前旗| 福海县| 七台河市| 西安市| 绥滨县|