欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、概述

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

  • 核心目標(biāo)

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

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

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

  • 常見場景

    • 數(shù)據(jù)庫操作失?。ㄈ邕B接超時、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ā)中用于保護可能出錯的代碼塊。

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)置保護(如Django的csrf_token<form>{% csrf_token %}</form>
文件上傳超限捕獲 RequestEntityTooLarge 異常except RequestEntityTooLarge: ...
第三方API超時設(shè)置超時 + 重試機制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)文章

  • Python可視化Matplotlib折線圖plot用法詳解

    Python可視化Matplotlib折線圖plot用法詳解

    這篇文章主要為大家介紹了Python可視化中Matplotlib折線圖plot用法的詳解,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進步
    2021-09-09
  • Python常見內(nèi)置高階函數(shù)即高階函數(shù)用法

    Python常見內(nèi)置高階函數(shù)即高階函數(shù)用法

    這篇文章主要介紹了Python的三種高階函數(shù)map、filter、reduce,高階函數(shù)就是一個函數(shù)可以作為參數(shù)傳給另外一個函數(shù),或者一個函數(shù)的返回值為另外一個函數(shù)(若返回值為該函數(shù)本身,則為遞歸),滿足其一則為高階函數(shù),具體內(nèi)容,需要的朋友可以參考下面文章的介紹
    2021-12-12
  • Python入門教程(三十九)Python的NumPy安裝與入門

    Python入門教程(三十九)Python的NumPy安裝與入門

    這篇文章主要介紹了Python入門教程(三十九)Python的NumPy安裝與入門,NumPy 是一個Python包,它是一個由多維數(shù)組對象和用于處理數(shù)組的例程集合組成的庫,,需要的朋友可以參考下
    2023-05-05
  • python實現(xiàn)微信自動回復(fù)及批量添加好友功能

    python實現(xiàn)微信自動回復(fù)及批量添加好友功能

    這篇文章主要介紹了python實現(xiàn)微信自動回復(fù)及python 批量生成微信添加好友截圖功能的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • 在python帶權(quán)重的列表中隨機取值的方法

    在python帶權(quán)重的列表中隨機取值的方法

    今天小編就為大家分享一篇在python帶權(quán)重的列表中隨機取值的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 簡單了解python代碼優(yōu)化小技巧

    簡單了解python代碼優(yōu)化小技巧

    這篇文章主要介紹了簡單了解python代碼優(yōu)化小技巧,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值
    2019-07-07
  • Python處理RSS、ATOM模塊FEEDPARSER介紹

    Python處理RSS、ATOM模塊FEEDPARSER介紹

    這篇文章主要介紹了Python處理RSS、ATOM模塊FEEDPARSER介紹,本文只是做個入門級的簡潔介紹,需要的朋友可以參考下
    2015-02-02
  • python hash每次調(diào)用結(jié)果不同的原因

    python hash每次調(diào)用結(jié)果不同的原因

    這篇文章主要介紹了python hash每次調(diào)用結(jié)果不同的原因,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Python 機器學(xué)習(xí)之線性回歸詳解分析

    Python 機器學(xué)習(xí)之線性回歸詳解分析

    回歸是監(jiān)督學(xué)習(xí)的一個重要問題,回歸用于預(yù)測輸入變量和輸出變量之間的關(guān)系,特別是當(dāng)輸入變量的值發(fā)生變化時,輸出變量的值也隨之發(fā)生變化?;貧w模型正是表示從輸入變量到輸出變量之間映射的函數(shù)
    2021-11-11
  • 一文了解conda虛擬環(huán)境的使用及常見問題

    一文了解conda虛擬環(huán)境的使用及常見問題

    管理不同項目的依賴關(guān)系是一個常見而棘手的問題,本文主要介紹了一文了解conda虛擬環(huán)境的使用及常見問題,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03

最新評論