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

Python異常處理從try-except到自定義異常的全過(guò)程

 更新時(shí)間:2026年03月23日 08:57:04   作者:cartech  
在Python編程中,異常處理是寫(xiě)出健壯代碼的關(guān)鍵技能,本文將帶你深入了解Python的異常處理機(jī)制,從基礎(chǔ)的try-except到自定義異常,讓你的程序更加穩(wěn)定和可靠,感興趣的朋友跟隨小編一起看看吧

??? Python異常處理完全指南:從try-except到自定義異常

在Python編程中,異常處理是寫(xiě)出健壯代碼的關(guān)鍵技能。本文將帶你深入了解Python的異常處理機(jī)制,從基礎(chǔ)的try-except到自定義異常,讓你的程序更加穩(wěn)定和可靠。

?? 什么是異常?

異常(Exception)是程序執(zhí)行過(guò)程中發(fā)生的錯(cuò)誤事件,會(huì)中斷程序的正常流程。Python使用異常對(duì)象來(lái)表示各種錯(cuò)誤情況,如除以零、文件不存在、索引越界等。

?? 基礎(chǔ)語(yǔ)法:try-except

最基本的異常處理結(jié)構(gòu)是try-except語(yǔ)句:

try:
    result = 10 / 0
except ZeroDivisionError:
    print("不能除以零!")

?? 捕獲多種異常

可以捕獲多種不同類(lèi)型的異常:

try:
    number = int(input("請(qǐng)輸入一個(gè)數(shù)字:"))
    result = 100 / number
except ValueError:
    print("輸入無(wú)效!請(qǐng)輸入數(shù)字。")
except ZeroDivisionError:
    print("不能除以零!")

?? 獲取異常信息

使用as關(guān)鍵字可以獲取異常對(duì)象,查看詳細(xì)信息:

try:
    file = open("不存在的文件.txt", "r")
except FileNotFoundError as e:
    print(f"錯(cuò)誤信息:{e}")
    print(f"錯(cuò)誤類(lèi)型:{type(e).__name__}")

? else 和 finally

else塊在沒(méi)有異常時(shí)執(zhí)行,finally塊無(wú)論是否發(fā)生異常都會(huì)執(zhí)行:

try:
    file = open("data.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("文件未找到")
else:
    print(f"文件內(nèi)容:{content}")
finally:
    print("清理工作完成")
    if 'file' in locals():
        file.close()

?? 捕獲所有異常

使用Exception可以捕獲大部分異常(但不建議濫用):

try:
    # 可能出錯(cuò)的代碼
    risky_operation()
except Exception as e:
    print(f"發(fā)生錯(cuò)誤:{e}")
    # 記錄日志或進(jìn)行其他處理

?? raise 主動(dòng)拋出異常

使用raise可以主動(dòng)拋出異常:

def check_age(age):
    if age < 0:
        raise ValueError("年齡不能為負(fù)數(shù)")
    if age > 150:
        raise ValueError("年齡不現(xiàn)實(shí)")
    return age

try:
    check_age(-5)
except ValueError as e:
    print(f"驗(yàn)證失敗:{e}")

?? 自定義異常

通過(guò)繼承Exception類(lèi)創(chuàng)建自定義異常:

class ValidationError(Exception):
    """數(shù)據(jù)驗(yàn)證錯(cuò)誤"""
    pass
class InsufficientFundsError(Exception):
    """余額不足錯(cuò)誤"""
    def __init__(self, balance, amount):
        self.balance = balance
        self.amount = amount
        super().__init__(f"余額 {balance} 不足,需要 {amount}")
# 使用自定義異常
class BankAccount:
    def __init__(self, balance=0):
        self.balance = balance
    def withdraw(self, amount):
        if amount > self.balance:
            raise InsufficientFundsError(self.balance, amount)
        self.balance -= amount
        return self.balance
# 測(cè)試
account = BankAccount(100)
try:
    account.withdraw(200)
except InsufficientFundsError as e:
    print(f"取款失?。簕e}")
    print(f"當(dāng)前余額:{e.balance}")
    print(f"請(qǐng)求金額:{e.amount}")

?? 異常鏈

使用raise from可以在轉(zhuǎn)換異常時(shí)保留原始異常信息:

def parse_config(data):
    try:
        return json.loads(data)
    except json.JSONDecodeError as e:
        raise ConfigError("配置文件格式錯(cuò)誤") from e
# 這樣可以看到完整的異常鏈

?? 最佳實(shí)踐

  1. 精確捕獲:盡量捕獲具體的異常類(lèi)型,而不是泛泛的Exception
  2. 不要靜默處理:空的except塊會(huì)隱藏問(wèn)題,至少要記錄日志
  3. 使用finally釋放資源:或使用上下文管理器(with語(yǔ)句)
  4. 異常信息要清晰:自定義異常時(shí)提供有用的錯(cuò)誤信息
  5. 不要濫用異常:異常是用于錯(cuò)誤處理,不是流程控制

?? 上下文管理器與異常

with語(yǔ)句自動(dòng)處理資源釋放,即使在異常情況下:

# 不需要手動(dòng)關(guān)閉文件,with會(huì)自動(dòng)處理
with open("data.txt", "r") as file:
    content = file.read()
    # 即使這里發(fā)生異常,文件也會(huì)被正確關(guān)閉

?? 總結(jié)

Python的異常處理機(jī)制提供了強(qiáng)大而靈活的錯(cuò)誤處理能力:

  • try-except:捕獲和處理異常
  • else:無(wú)異常時(shí)執(zhí)行的代碼
  • finally:無(wú)論是否異常都執(zhí)行的清理代碼
  • raise:主動(dòng)拋出異常
  • 自定義異常:創(chuàng)建特定領(lǐng)域的錯(cuò)誤類(lèi)型

掌握異常處理,讓你的Python程序更加健壯和專(zhuān)業(yè)!??

到此這篇關(guān)于Python異常處理從try-except到自定義異常的全過(guò)程的文章就介紹到這了,更多相關(guān)Python try-except到自定義異常內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • linux安裝python修改默認(rèn)python版本方法

    linux安裝python修改默認(rèn)python版本方法

    在本文中我們給大家總結(jié)了關(guān)于linux安裝python修改默認(rèn)python版本的方法和相關(guān)知識(shí)點(diǎn),需要的讀者們參考下。
    2019-03-03
  • Python map函數(shù)()用法

    Python map函數(shù)()用法

    map()函數(shù)是Python中的一個(gè)內(nèi)置函數(shù),它的功能是將指定的函數(shù),依次作用于可迭代對(duì)象的每個(gè)元素,并返回一個(gè)迭代器對(duì)象,這篇文章主要介紹了Python map函數(shù)()用法,需要的朋友可以參考下
    2023-07-07
  • Python Django框架實(shí)現(xiàn)應(yīng)用添加logging日志操作示例

    Python Django框架實(shí)現(xiàn)應(yīng)用添加logging日志操作示例

    這篇文章主要介紹了Python Django框架實(shí)現(xiàn)應(yīng)用添加logging日志操作,結(jié)合實(shí)例形式分析了Django框架中添加Python內(nèi)建日志模塊相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • Python中Tkinter組件Button的具體使用

    Python中Tkinter組件Button的具體使用

    Button=組件用于實(shí)現(xiàn)各種各樣的按鈕,本文主要介紹了Python中Tkinter組件Button的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-01-01
  • Python獲取腳本所在目錄的正確方法

    Python獲取腳本所在目錄的正確方法

    這篇文章主要介紹了Python獲取腳本所在目錄的正確方法,需要的朋友可以參考下
    2014-04-04
  • Python+Selenium+Pytesseract實(shí)現(xiàn)圖片驗(yàn)證碼識(shí)別

    Python+Selenium+Pytesseract實(shí)現(xiàn)圖片驗(yàn)證碼識(shí)別

    這篇文章主要介紹了利用Python+Selenium+Pytesseract實(shí)現(xiàn)圖片驗(yàn)證碼識(shí)別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-01-01
  • 詳解Python中datetime庫(kù)的使用

    詳解Python中datetime庫(kù)的使用

    這篇文章主要介紹了Python中datetime庫(kù)的使用,它提供了一系列由簡(jiǎn)單到復(fù)雜的時(shí)間處理方法。datetime 庫(kù)可以從系統(tǒng)中獲得時(shí)間,并以用戶(hù)選擇的格式輸出,需要的朋友可以參考下
    2023-04-04
  • 安裝pyhttpx解決ImportError: DLL load failed錯(cuò)誤

    安裝pyhttpx解決ImportError: DLL load failed錯(cuò)誤

    這篇文章主要為大家介紹了安裝pyhttpx解決ImportError: DLL load failed錯(cuò)誤,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Python函數(shù)參數(shù)定義及傳遞方式解析

    Python函數(shù)參數(shù)定義及傳遞方式解析

    這篇文章主要介紹了Python函數(shù)參數(shù)定義及傳遞方式解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • django使用圖片延時(shí)加載引起后臺(tái)404錯(cuò)誤

    django使用圖片延時(shí)加載引起后臺(tái)404錯(cuò)誤

    本文給大家介紹的是作者在Django中使用圖片的延時(shí)加載技術(shù)后引起后臺(tái)404錯(cuò)誤的問(wèn)題以及解決思路和方法,有需要的小伙伴可以參考下
    2017-04-04

最新評(píng)論

敖汉旗| 万山特区| 色达县| 河曲县| 家居| 简阳市| 林西县| 南川市| 玛曲县| 克什克腾旗| 内江市| 清水县| 交口县| 桐城市| 阳信县| 苍山县| 九江市| 保靖县| 泗阳县| 长海县| 皋兰县| 曲麻莱县| 新龙县| 平和县| 徐州市| 曲靖市| 绵阳市| 镇康县| 衡阳市| 同心县| 桐乡市| 沐川县| 星座| 边坝县| 衡阳县| 都匀市| 钟祥市| 麦盖提县| 汶上县| 万山特区| 永泰县|