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

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

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

一、概述

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

  • 核心目標(biāo)

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

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

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

  • 常見場景

    • 數(shù)據(jù)庫操作失敗(如連接超時、SQL 語法錯誤)。

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

    • 用戶輸入校驗失?。ㄈ鐓?shù)缺失、類型不匹配)。

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

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

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

核心原則

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

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

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

二、try 語句

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

1.基礎(chǔ)語法

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

常見異常類型

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

一句話總結(jié)

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

2. 示例:捕獲常見異常

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

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

代碼解釋: 

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

常見問題解決方案

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

總結(jié)

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

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

相關(guān)文章

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

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

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

    Python黑魔法Descriptor描述符的實例解析

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

    一文教你解決Python不支持中文路徑的問題

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

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

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

    python打開windows應(yīng)用程序的實例

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

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

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

    Pytorch實現(xiàn)Fashion-mnist分類任務(wù)全過程

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

    python 等差數(shù)列末項計算方式

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

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

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

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

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

最新評論

平山县| 灵武市| 龙南县| 五原县| 鄂托克旗| 德安县| 乌什县| 永宁县| 福海县| 临清市| 博湖县| 渭南市| 惠州市| 富宁县| 镇雄县| 荣昌县| 平武县| 兴化市| 鸡东县| 抚州市| 承德县| 水城县| 嘉善县| 卢湾区| 额尔古纳市| 芜湖县| 申扎县| 七台河市| 廉江市| 顺义区| 新乡市| 三原县| 泌阳县| 正安县| 石家庄市| 澄江县| 赞皇县| 盖州市| 新余市| 宁远县| 双流县|