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

Python中web錯(cuò)誤處理與異常捕獲示例詳解

 更新時(shí)間:2025年07月11日 09:59:23   作者:傷不起bb  
在任何編程語(yǔ)言中,異常(Exception)都是一種不可避免的現(xiàn)象,它們通常是由程序運(yùn)行時(shí)的錯(cuò)誤或意外情況引起的,這篇文章主要介紹了Python中web錯(cuò)誤處理與異常捕獲的相關(guān)資料,需要的朋友可以參考下

一、概述

在 Web 開(kāi)發(fā)中,錯(cuò)誤處理與異常捕獲是保障服務(wù)穩(wěn)定性和用戶體驗(yàn)的核心機(jī)制:

  • 核心目標(biāo)

    • 防止服務(wù)崩潰:捕獲未處理的異常,避免因單個(gè)請(qǐng)求錯(cuò)誤導(dǎo)致整個(gè)服務(wù)不可用。

    • 友好用戶提示:向客戶端返回有意義的錯(cuò)誤信息(如 404 頁(yè)面、500 錯(cuò)誤頁(yè))。

    • 日志記錄:記錄異常堆棧信息,便于調(diào)試和問(wèn)題追蹤。

  • 常見(jiàn)場(chǎng)景

    • 數(shù)據(jù)庫(kù)操作失?。ㄈ邕B接超時(shí)、SQL 語(yǔ)法錯(cuò)誤)。

    • 外部 API 調(diào)用異常(如網(wǎng)絡(luò)中斷、響應(yīng)格式錯(cuò)誤)。

    • 用戶輸入校驗(yàn)失敗(如參數(shù)缺失、類(lèi)型不匹配)。

  • HTTP 錯(cuò)誤碼關(guān)聯(lián)

    • 4xx:客戶端錯(cuò)誤(如 400 Bad Request、404 Not Found)。

    • 5xx:服務(wù)端錯(cuò)誤(如 500 Internal Server Error)。

核心原則

  • 防崩潰:捕獲所有未處理異常,避免服務(wù)中斷。

  • 明日志:記錄異常堆棧,便于調(diào)試。

  • 友好響應(yīng):返回用戶易懂的錯(cuò)誤信息,隱藏敏感細(xì)節(jié)。

二、try 語(yǔ)句

try 語(yǔ)句是 Python 中處理異常的基礎(chǔ)工具,在 Web 開(kāi)發(fā)中用于保護(hù)可能出錯(cuò)的代碼塊。

1.基礎(chǔ)語(yǔ)法

try:  
    # 可能引發(fā)異常的代碼(如數(shù)據(jù)庫(kù)操作、文件讀寫(xiě))  
    risky_operation()  
except ExceptionType as e:  
    # 捕獲特定異常并處理  
    handle_error(e)  
else:  
    # 無(wú)異常時(shí)執(zhí)行(可選)  
    clean_up()  
finally:  
    # 無(wú)論是否異常都執(zhí)行(如釋放資源)  
    release_resources()  
代碼塊用途執(zhí)行條件最佳實(shí)踐
try包裹可能引發(fā)異常的代碼總是執(zhí)行僅包含可能出錯(cuò)的代碼,避免冗余邏輯。
except捕獲并處理特定異常當(dāng) try 塊發(fā)生異常時(shí)優(yōu)先捕獲具體異常類(lèi)型,避免裸露的 except
else執(zhí)行無(wú)異常時(shí)的后續(xù)邏輯try 塊無(wú)異常時(shí)執(zhí)行用于分離正常流程和異常處理代碼。
finally無(wú)論是否異常都執(zhí)行的清理操作總是執(zhí)行釋放資源(如關(guān)閉文件、數(shù)據(jù)庫(kù)連接)。

常見(jiàn)異常類(lèi)型

異常觸發(fā)場(chǎng)景
FileNotFoundError文件不存在時(shí)嘗試讀?。ㄈ?nbsp;open("r"))。
PermissionError無(wú)權(quán)限訪問(wèn)文件(如只讀文件嘗試寫(xiě)入)。
IsADirectoryError嘗試以文件模式操作目錄。
UnicodeDecodeError文本文件編碼不匹配(如用 utf-8 讀取 gbk 文件)。

一句話總結(jié)

try 防崩潰,except 抓異常,else 走正路,finally 清戰(zhàn)場(chǎng)。

2. 示例:捕獲常見(jiàn)異常

import requests
from requests.exceptions import RequestException, Timeout, HTTPError

try:
    #發(fā)送 GET 請(qǐng)求,并設(shè)置超時(shí)時(shí)間為 5 秒
    response = requests.get('https://www.example.com', timeout=5)
    
    #如果狀態(tài)碼不是 200, 拋出 HTTPError 異常
    response.raise_for_status ()      # 如果狀態(tài)碼是 404 或 500, 拋出異常
    
    #如果請(qǐng)求成功,則輸出響應(yīng)內(nèi)容
    print('Response Body:', response.text)
   
     #捕獲請(qǐng)求超時(shí)異常
    except Timeout:
        print('Request timed out')
    #捕獲 HTTP 錯(cuò)誤 (如狀態(tài)碼 404、500 等)
    except HTTPError as http_err:
        print(f'HTTP error occurred: {http_err}')
    
    #捕獲其他網(wǎng)絡(luò)相關(guān)的錯(cuò)誤
    except RequestException as req_err:
        print(f'Request error occurred: {req_err}')
    #可以在 finally 塊中清理資源 (如關(guān)閉文件或連接)
    finally:
        print('Request attempt completed.')

代碼解釋?zhuān)?nbsp;

  1. try 塊:首先發(fā)起 HTTP 請(qǐng)求,設(shè)置超時(shí)時(shí)間為 5 秒,并使用 response.raise_for_status () 來(lái)檢查響應(yīng)的狀態(tài)碼。如果服務(wù)器返回了錯(cuò)誤的狀態(tài)碼 (如 404、500), raise_for_status () 會(huì)拋出 HTTPError 異常。
  2. except 塊:
    • Timeout: 如果請(qǐng)求超時(shí) (超過(guò)設(shè)置的 5 秒), 程序會(huì)捕獲到 Timeout 異常,并打印 “Request timed out”。
    • HTTPError: 如果響應(yīng)的狀態(tài)碼表明出現(xiàn) HTTP 錯(cuò)誤 (例如 404 表示未找到頁(yè)面), 程序會(huì)捕獲到 HTTPError 異常,并打印相關(guān)錯(cuò)誤信息。
    • RequestException: 捕獲其他類(lèi)型的網(wǎng)絡(luò)相關(guān)錯(cuò)誤 (如連接問(wèn)題、DNS 解析失敗等)。RequestException 是所有 requests 庫(kù)異常的基類(lèi),可以捕獲任何 requests 庫(kù)拋出的異常。
  3. finally 塊: finally 中的代碼無(wú)論是否發(fā)生異常都會(huì)被執(zhí)行,通常用于釋放資源或做一些收尾工作。”Request attempt completed“   表示請(qǐng)求結(jié)束

常見(jiàn)問(wèn)題解決方案

問(wèn)題解決方案代碼示例
數(shù)據(jù)庫(kù)連接泄漏使用 contextlib 管理連接with database_connection() as conn:
CSRF/XSS攻擊啟用框架內(nèi)置保護(hù)(如Django的csrf_token<form>{% csrf_token %}</form>
文件上傳超限捕獲 RequestEntityTooLarge 異常except RequestEntityTooLarge: ...
第三方API超時(shí)設(shè)置超時(shí) + 重試機(jī)制requests.get(url, timeout=5)

總結(jié)

場(chǎng)景工具/方法
代碼塊級(jí)錯(cuò)誤處理try-except + 具體異常類(lèi)型捕獲
全局異常統(tǒng)一響應(yīng)框架錯(cuò)誤處理器(如 @errorhandler
自定義錯(cuò)誤類(lèi)型繼承 Exception 定義業(yè)務(wù)異常類(lèi)
日志記錄logging 模塊記錄堆棧信息
異步錯(cuò)誤處理asyncio 任務(wù) + 異?;卣{(diào)

到此這篇關(guān)于Python中web錯(cuò)誤處理與異常捕獲的文章就介紹到這了,更多相關(guān)Python web錯(cuò)誤處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Jupyter Notebook調(diào)用指定的虛擬環(huán)境的實(shí)現(xiàn)示例

    Jupyter Notebook調(diào)用指定的虛擬環(huán)境的實(shí)現(xiàn)示例

    本文主要介紹了Jupyter Notebook調(diào)用指定的虛擬環(huán)境的實(shí)現(xiàn)示例,,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Python黑魔法Descriptor描述符的實(shí)例解析

    Python黑魔法Descriptor描述符的實(shí)例解析

    與迭代器和裝飾器等一樣,描述符也是Python編程中的一項(xiàng)高級(jí)技巧,這里我們就來(lái)講解Python黑魔法Descriptor描述符的實(shí)例解析:
    2016-06-06
  • 一文教你解決Python不支持中文路徑的問(wèn)題

    一文教你解決Python不支持中文路徑的問(wèn)題

    Python是一種廣泛使用的高級(jí)編程語(yǔ)言,然而在處理包含中文字符的文件路徑時(shí),Python有時(shí)會(huì)表現(xiàn)出一些不友好的行為,下面小編就來(lái)為大家介紹一下具體的解決方法吧
    2025-03-03
  • Pandas中的unique()和nunique()區(qū)別詳解

    Pandas中的unique()和nunique()區(qū)別詳解

    Pandas中Series和DataFrame的兩種數(shù)據(jù)類(lèi)型中都有nunique()和unique()方法,本文詳細(xì)的介紹了兩者的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-08-08
  • python打開(kāi)windows應(yīng)用程序的實(shí)例

    python打開(kāi)windows應(yīng)用程序的實(shí)例

    今天小編就為大家分享一篇python打開(kāi)windows應(yīng)用程序的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • Python設(shè)計(jì)模式中的行為型策略模式

    Python設(shè)計(jì)模式中的行為型策略模式

    這篇文章主要介紹了Python設(shè)計(jì)模式中的行為型策略模式,策略模式即Strategy?Pattern,其定義了算法家族,分別封裝起來(lái),讓他們之間可以相互替換,此模式讓算法的變化,不會(huì)影響到使用算法的客戶,下文相關(guān)資料具有一點(diǎn)的參考價(jià)值,需要的小伙伴可以參考一下
    2022-02-02
  • Pytorch實(shí)現(xiàn)Fashion-mnist分類(lèi)任務(wù)全過(guò)程

    Pytorch實(shí)現(xiàn)Fashion-mnist分類(lèi)任務(wù)全過(guò)程

    這篇文章主要介紹了Pytorch實(shí)現(xiàn)Fashion-mnist分類(lèi)任務(wù)全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python 等差數(shù)列末項(xiàng)計(jì)算方式

    python 等差數(shù)列末項(xiàng)計(jì)算方式

    這篇文章主要介紹了python 等差數(shù)列末項(xiàng)計(jì)算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python單例設(shè)計(jì)模式實(shí)現(xiàn)解析

    python單例設(shè)計(jì)模式實(shí)現(xiàn)解析

    這篇文章主要介紹了python單例設(shè)計(jì)模式實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • python如何使用split多字符分割字符串的方法

    python如何使用split多字符分割字符串的方法

    這篇文章主要給大家介紹了關(guān)于python如何使用split多字符分割字符串的相關(guān)資料,split()方法是一個(gè)非常強(qiáng)大的工具,可以幫助我們輕松地分割字符串,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

治多县| 卢湾区| 平阳县| 彰武县| 九江县| 旺苍县| 礼泉县| 嘉黎县| 肃宁县| 东乡| 安义县| 富蕴县| 基隆市| 怀安县| 秦皇岛市| 连山| 维西| 高雄县| 工布江达县| 建德市| 伊宁市| 揭东县| 浠水县| 东台市| 刚察县| 布拖县| 当涂县| 高雄市| 景德镇市| 宿州市| 湾仔区| 玉林市| 和龙市| 藁城市| 清镇市| 天台县| 兴业县| 沙河市| 京山县| 安康市| 上犹县|