自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關(guān)于 Python 的 12 個(gè)異常處理技巧

開發(fā)
本文我們就將揭示Python中12個(gè)實(shí)用異常處理技巧,掌握這12個(gè)異常處理技巧,就如同擁有了應(yīng)對(duì)Python世界中各種“小搗蛋”的錦囊妙計(jì)。

在Python的世界里,異常就像那些偶爾闖入代碼樂(lè)園的小搗蛋。它們可能因數(shù)據(jù)錯(cuò)誤、資源不足、邏輯沖突等問(wèn)題引發(fā),如果不妥善處理,輕則導(dǎo)致程序中斷運(yùn)行,重則引發(fā)難以預(yù)料的后果。所以,學(xué)會(huì)與這些“小搗蛋”和平共處,是每位Python開發(fā)者進(jìn)階之路上的必修課。今天,我們就來(lái)揭示12個(gè)實(shí)用異常處理技巧,讓你的代碼更加穩(wěn)健、優(yōu)雅!

第1招:初識(shí)try-except

try:
    # 可能拋出異常的代碼
except Exception as e:
    # 異常處理代碼

這是最基礎(chǔ)的異常捕獲結(jié)構(gòu)。try塊中放入可能出現(xiàn)異常的代碼,當(dāng)出現(xiàn)異常時(shí),程序會(huì)立即跳轉(zhuǎn)到對(duì)應(yīng)的except塊執(zhí)行。這里的Exception是所有異常的基類,意味著可以捕獲任何類型的異常。as e將捕獲的異常賦值給變量e,便于查看具體錯(cuò)誤信息。

第2招:精準(zhǔn)定位異常類型

try:
    # 可能拋出異常的代碼
except ValueError:
    # 處理ValueError異常
except FileNotFoundError:
    # 處理FileNotFoundError異常

如果知道可能會(huì)遇到哪些特定類型的異常,使用特定的異常類替代Exception,可以實(shí)現(xiàn)更精確的捕獲和處理。這樣既能針對(duì)性地修復(fù)問(wèn)題,又能避免不必要的代碼分支。

第3招:萬(wàn)能except的謹(jǐn)慎使用

try:
    # 可能拋出異常的代碼
except:
    # 處理所有異常

雖然except:可以捕獲所有異常,但過(guò)度使用可能導(dǎo)致隱藏真正的問(wèn)題,讓調(diào)試變得困難。建議僅在確實(shí)需要忽略所有異?;蜻M(jìn)行統(tǒng)一處理的情況下使用。

第4招:finally,無(wú)論如何都要做的事

try:
    # 可能拋出異常的代碼
except Exception as e:
    # 異常處理代碼
finally:
    # 無(wú)論是否發(fā)生異常,都會(huì)執(zhí)行的代碼

finally塊中的代碼無(wú)論是否發(fā)生異常,都會(huì)被執(zhí)行。常用于資源清理(如關(guān)閉文件、釋放鎖等)等場(chǎng)景,確保程序運(yùn)行的完整性。

第5招:except與else的黃金搭檔

try:
    # 可能拋出異常的代碼
except Exception as e:
    # 異常處理代碼
else:
    # 如果try塊沒(méi)有拋出異常,執(zhí)行此代碼

else塊在沒(méi)有異常發(fā)生時(shí)執(zhí)行,與except形成鮮明對(duì)比,有助于邏輯劃分,使得代碼更具可讀性。

第6招:自定義異常類,彰顯個(gè)性

class MyCustomError(Exception):
    pass

raise MyCustomError("出錯(cuò)了,快來(lái)看看我!")

通過(guò)繼承Exception類創(chuàng)建自定義異常,可以更精確地表達(dá)業(yè)務(wù)邏輯中的錯(cuò)誤情況,提升代碼的清晰度和可維護(hù)性。

第7招:with語(yǔ)句,優(yōu)雅地處理上下文

with open('example.txt', 'r') as f:
    content = f.read()

with語(yǔ)句結(jié)合上下文管理器自動(dòng)處理資源的打開與關(guān)閉,即使在讀取文件過(guò)程中發(fā)生異常,也會(huì)確保文件最終被正確關(guān)閉。大大簡(jiǎn)化了代碼,增強(qiáng)了異常安全性。

第8招:捕獲后繼續(xù)執(zhí)行,用continue或pass

for i in range(10):
    try:
        # 可能拋出異常的代碼
    except Exception as e:
        print(f"第{i}次出現(xiàn)異常:{e}")
        continue  # 跳過(guò)當(dāng)前循環(huán),執(zhí)行下一次

在循環(huán)等結(jié)構(gòu)中,使用continue可以在捕獲異常后跳過(guò)當(dāng)前迭代,繼續(xù)執(zhí)行下一次。若僅需忽略異常,使用pass即可。

第9招:多級(jí)捕獲,層層遞進(jìn)

try:
    # 可能拋出異常的代碼
except ValueError:
    try:
        # 嘗試修復(fù)ValueError的代碼
    except Exception as e:
        # 若修復(fù)失敗,處理新異常

在處理復(fù)雜場(chǎng)景時(shí),可以嵌套try-except結(jié)構(gòu),實(shí)現(xiàn)對(duì)異常的多級(jí)捕獲與處理。

第10招:異常信息打印與記錄

import traceback

try:
    # 可能拋出異常的代碼
except Exception as e:
    print("發(fā)生異常:", e)
    traceback.print_exc()  # 打印詳細(xì)的堆棧跟蹤信息

利用traceback模塊,可以獲取并打印詳細(xì)的異常堆棧跟蹤信息,這對(duì)于定位問(wèn)題源頭大有裨益。在生產(chǎn)環(huán)境中,應(yīng)將此類信息記錄至日志文件。

第11招:使用contextlib.suppress抑制特定異常

from contextlib import suppress

with suppress(FileNotFoundError):
    os.remove('non_existent_file.txt')

suppress函數(shù)允許在指定代碼塊中臨時(shí)抑制特定異常,使其不被拋出。適用于已知某些異常無(wú)需處理的情況。

第12招:使用logging模塊全面記錄異常

import logging

logging.basicConfig(level=logging.ERROR)

try:
    # 可能拋出異常的代碼
except Exception as e:
    logging.error("發(fā)生異常:", exc_info=True)  # 記錄異常及堆棧跟蹤信息

logging模塊提供了豐富的日志記錄功能,設(shè)置適當(dāng)?shù)娜罩炯?jí)別,可在捕獲異常時(shí)記錄詳細(xì)信息。exc_info=True確保異常及其堆棧跟蹤一同被記錄。

結(jié)語(yǔ):擁抱異常,編寫健壯代碼

掌握這12個(gè)異常處理技巧,就如同擁有了應(yīng)對(duì)Python世界中各種“小搗蛋”的錦囊妙計(jì)。面對(duì)異常,不再畏懼,而是將其轉(zhuǎn)化為提升代碼質(zhì)量、增強(qiáng)程序穩(wěn)定性的契機(jī)。記住,優(yōu)秀的程序員不僅會(huì)寫代碼,更懂得如何優(yōu)雅地處理異常!

責(zé)任編輯:趙寧寧 來(lái)源: 手把手PythonAI編程
相關(guān)推薦

2022-11-04 15:56:41

2024-06-24 13:35:48

2013-09-10 10:34:49

PowerShell

2023-09-24 13:55:42

Spring應(yīng)用程序

2015-03-16 16:16:15

JavaJava異常處理Java最佳實(shí)踐

2009-06-25 14:05:40

Java應(yīng)用技巧

2024-02-26 16:40:58

2021-01-12 11:37:09

Python編程語(yǔ)言開發(fā)

2024-05-22 09:29:43

2024-01-03 14:54:56

PythonPandas數(shù)據(jù)處理工具

2013-05-28 09:47:36

異常處理Javay異常

2011-09-20 15:19:15

Python

2024-06-12 12:03:15

Python變量代碼

2024-02-26 08:20:00

CSS開發(fā)

2023-12-19 13:31:00

CSS前端技巧

2024-05-23 11:53:24

Python代碼異常處理

2025-02-21 12:30:00

字符串前端JavaScript

2024-06-04 07:46:05

2012-06-28 15:57:08

Hadoop

2013-04-01 09:39:06

JavaJava異常
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)