国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
先決條件
目標(biāo)
解釋錯(cuò)誤和異常
異常
內(nèi)建異常
ValueError
TypeError
IndexError
KeyError
自訂異常
處理異常
使用 try-except 語(yǔ)句
使用一個(gè) except 語(yǔ)句處理多個(gè)異常類別
通配符異常類別
使用 finally 語(yǔ)句
建立自訂異常類別
首頁(yè) 後端開發(fā) Python教學(xué) Python 中的錯(cuò)誤處理:最佳實(shí)踐。探索如何有效處理異常

Python 中的錯(cuò)誤處理:最佳實(shí)踐。探索如何有效處理異常

Jan 12, 2025 pm 10:09 PM

Error Handling in Python: Best Practices. Explore how to handle exceptions effectively

摘要:

程式錯(cuò)誤是不可恢復(fù)的;當(dāng)程式遇到錯(cuò)誤時(shí),它會(huì)立即退出或崩潰。

優(yōu)秀的程式設(shè)計(jì)師會(huì)確保他們的程式碼或軟體能夠優(yōu)雅地處理軟體使用過(guò)程中可能出現(xiàn)的錯(cuò)誤/異常,而不會(huì)崩潰或產(chǎn)生不良結(jié)果。想像一下,為金融機(jī)構(gòu)編寫僅接受數(shù)字輸入的軟體,如果用戶輸入了字母而不是數(shù)字進(jìn)行算術(shù)運(yùn)算,這通常會(huì)引發(fā)錯(cuò)誤,並且軟體會(huì)因?yàn)橐粋€(gè)用戶而崩潰,如果沒有任何適當(dāng)?shù)臋C(jī)制來(lái)處理錯(cuò)誤的話。這絕對(duì)不是一件好事——它對(duì)業(yè)務(wù)不利,可能導(dǎo)致客戶感到沮喪,而且有人可能會(huì)因?yàn)椴环Q職而失去工作。

在本文中,我們將學(xué)習(xí)如何以最佳方式處理程式碼中由於使用者互動(dòng)而可能出現(xiàn)的錯(cuò)誤。敬請(qǐng)關(guān)注。

先決條件

本文適合:

  • 尋求學(xué)習(xí)如何在程式碼中處理異常的 Python 軟體開發(fā)人員。
  • 已經(jīng)熟悉 Python 並希望學(xué)習(xí) Python 中錯(cuò)誤處理概念的人員。
  • 尋求提高 Python 錯(cuò)誤處理知識(shí)的現(xiàn)有專業(yè)人士。

目標(biāo)

通讀本文後,讀者應(yīng)該能夠:

  • 清楚地理解 Python 中錯(cuò)誤處理的概念及其重要性。
  • 了解自訂異常類別以及如何實(shí)作它們。
  • 理解 Python 中錯(cuò)誤和異常之間的關(guān)鍵區(qū)別。

解釋錯(cuò)誤和異常

錯(cuò)誤異常通??梢曰Q使用,但它們?cè)诩夹g(shù)上意義不同。在Python 中,錯(cuò)誤異常都是BaseException都是

BaseException

錯(cuò)誤

SyntaxError

錯(cuò)誤是不可恢復(fù)的;當(dāng)我們的程式遇到錯(cuò)誤時(shí),它會(huì)立即退出或崩潰。即使您可能預(yù)料到錯(cuò)誤,也沒有辦法以程式方式處理錯(cuò)誤。下面列出了一些錯(cuò)誤:

name = “Austin”;
print(name)

SyntaxError這是程式設(shè)計(jì)師面臨的最常見錯(cuò)誤類型之一,它發(fā)生在程式碼不遵循正確的 Python 語(yǔ)法時(shí),並且可以在解析期間檢測(cè)到。對(duì)於學(xué)習(xí)者或從其他程式語(yǔ)言轉(zhuǎn)向 Python 的人來(lái)說(shuō),這是一個(gè)很容易出現(xiàn)的問題。

IndentationError這會(huì)導(dǎo)致

,因?yàn)樵?Python 中,語(yǔ)句不會(huì)以分號(hào)結(jié)尾。

當(dāng) Python 程式碼縮排不正確時(shí),就會(huì)發(fā)生此錯(cuò)誤,並在解析程式碼時(shí)偵測(cè)到。 Python 中的縮排非常重要。它是 Python 中唯一可以定義程式碼區(qū)塊的方式,這與大多數(shù)使用花括號(hào)的語(yǔ)言不同。
name = “Austin”;
print(name)

這段程式碼會(huì)因?yàn)榭s排不當(dāng)而導(dǎo)致錯(cuò)誤。它應(yīng)該是:

active = True
if (active):
print(“The user is active”)

異常

Python 中的異常在運(yùn)作時(shí)發(fā)生。與錯(cuò)誤不同,可以以程式設(shè)計(jì)方式正確地處理或捕獲它們,以便我們的程式可以繼續(xù)運(yùn)行而不會(huì)崩潰。換句話說(shuō),它們是可恢復(fù)的。以下是 Python 中一些常見的異常:

內(nèi)建異常

這些類型的異常是 Python 程式語(yǔ)言的一部分。以下列出其中一些:

ValueError

當(dāng)向函數(shù)傳遞無(wú)效參數(shù)時(shí)發(fā)生此錯(cuò)誤,即使類型可能正確。

if (active):
    print(“The user is active”)

從上面的程式碼片段中,如果我們向函數(shù)傳遞數(shù)字字串,它將成功轉(zhuǎn)換為數(shù)字,否則,它將產(chǎn)生 ValueError。

def str_num(num_string):
    return(int(string))

TypeError

當(dāng)向函數(shù)傳遞不合適的型別參數(shù)時(shí),就會(huì)引發(fā)此錯(cuò)誤。

print(str_num(“123”)) #works perfectly
print(str_num(“abc”)) #raises a ValueError

這會(huì)引發(fā) TypeError。

IndexError

當(dāng)您嘗試使用錯(cuò)誤索引存取清單中的值時(shí),就會(huì)出現(xiàn)此錯(cuò)誤。

def addition(num1, num2):
    return num1 + num2
# calling the function
addition(5, A)

這會(huì)導(dǎo)致 IndexError,因?yàn)?my_list[2] 無(wú)法存取。

KeyError

當(dāng)嘗試使用錯(cuò)誤或不存在的鍵存取字典中的值時(shí),就會(huì)引發(fā)此錯(cuò)誤。

my_list = [“dog”, “cat”]
my_list[2]

這會(huì)引發(fā) KeyError。 您可以在此處找到其他內(nèi)建異常。

自訂異常

自訂異常由程式設(shè)計(jì)師定義。在這裡,Python 使程式設(shè)計(jì)師能夠手動(dòng)定義程式應(yīng)該在執(zhí)行期間檢查的條件,並在找到時(shí)引發(fā)異常。您可以透過(guò)建立一個(gè)從 Exception 類別繼承的類別來(lái)實(shí)現(xiàn)這一點(diǎn)。

處理異常

處理異??纱_保我們的軟體應(yīng)用程式在遇到應(yīng)用程式生命週期中出現(xiàn)的某些錯(cuò)誤時(shí)具有可預(yù)測(cè)的效能。在本節(jié)中,您將學(xué)習(xí)如何在程式設(shè)計(jì)中實(shí)現(xiàn)這一點(diǎn)。

使用 try-except 語(yǔ)句

try-except 語(yǔ)句提供了一種安全的方法來(lái)處理可能引發(fā)錯(cuò)誤或異常的程式碼。 try 語(yǔ)句包裝有問題的程式碼或try 子句;這是很可能導(dǎo)致整個(gè)程式出錯(cuò)的程式碼部分;當(dāng)從使用者接收輸入、從檔案讀取時(shí),這很可能會(huì)發(fā)生,僅舉幾例。

except 語(yǔ)句標(biāo)示 except 子句的開始;這是包裝在 except 區(qū)塊中的其餘程式碼。 except 子句處理 try 區(qū)塊中引發(fā)的異常。

讓我?guī)私鈭?zhí)行工作流程。您的Python 程式通常會(huì)執(zhí)行,直到它到達(dá)包含「有問題的」程式碼的try 區(qū)塊,如果當(dāng)時(shí)在try 區(qū)塊中執(zhí)行程式碼時(shí)沒有可能的錯(cuò)誤,它會(huì)跳過(guò)except 區(qū)塊並繼續(xù)執(zhí)行程式碼庫(kù)的其餘部分。但是,如果在 try 區(qū)塊中執(zhí)行程式碼時(shí)遇到錯(cuò)誤,則會(huì)在建立異常物件後,控制會(huì)立即跳到 except 區(qū)塊,在該區(qū)塊中,它應(yīng)該由匹配的異常類別處理。

name = “Austin”;
print(name)

從上面的程式碼片段中,如果將非數(shù)值傳遞給程序,則會(huì)建立異常物件並引發(fā) ValueError??刂屏⒓刺?except 區(qū)塊,在該區(qū)塊中它會(huì)掃描適當(dāng)?shù)漠惓n悇e。在這裡,ValueError 類別就足夠了。錯(cuò)誤已正確處理。但是,如果找不到正確的類,則控制會(huì)移動(dòng)到外部 try 區(qū)塊(如果有的話),如果仍然沒有正確處理異常,則程式會(huì)崩潰。

使用一個(gè) except 語(yǔ)句處理多個(gè)異常類別

可以檢查多個(gè)異常類別並處理特定異常。如果您不確定幾個(gè)異常中的哪一個(gè)會(huì)導(dǎo)致程式碼執(zhí)行結(jié)果,則首選這種方法。請(qǐng)參閱下面的程式碼片段。

active = True
if (active):
print(“The user is active”)

通配符異常類別

Exception 類別是 BaseException 的直接子類別。 Exception 類別是所有非致命異常的基底類別。

大多數(shù)情況下,Exception 類別足以處理程式碼執(zhí)行期間引發(fā)的多數(shù)異常。

if (active):
    print(“The user is active”)

即使 Exception 類別能夠處理非致命異常,最好還是謹(jǐn)慎使用它。使用正確的 Exception 類,因?yàn)樗欣墩{(diào)試和提高程式碼的可讀性。

使用 finally 語(yǔ)句

包裝在 finally 區(qū)塊中的程式碼部分無(wú)論是否發(fā)生異常都會(huì)執(zhí)行。這使得它適合處理清理任務(wù);關(guān)閉檔案和釋放記憶體資源。

def str_num(num_string):
    return(int(string))

建立自訂異常類別

建立自訂異常使程式設(shè)計(jì)師能夠?yàn)檐涹w程式提出特定的異常。這可能包含可能對(duì)特定軟體程式的功能有害的特殊條件或極端情況。定義的自訂異常類別必須從 Exception 類別繼承。

print(str_num(“123”)) #works perfectly
print(str_num(“abc”)) #raises a ValueError

上面的程式碼片段顯示如何建立和使用自訂異常。根據(jù)用例,它可以以更複雜的方式使用。

為什麼錯(cuò)誤/異常處理很重要

「不要相信使用者」是軟體開發(fā)人員常見的說(shuō)法,這重申了您無(wú)法完全確定使用者將如何與您的軟體應(yīng)用程式互動(dòng);他們輸入的輸入類型以及您作為程式設(shè)計(jì)師在編寫應(yīng)用程式時(shí)可能沒有想到的其他一些極端情況。以下解釋了正確處理錯(cuò)誤/異常的一些重要原因:

  1. 防止崩潰 如果沒有異常處理,未處理的錯(cuò)誤可能會(huì)導(dǎo)致程式突然崩潰。這可能導(dǎo)致資料遺失或使用者體驗(yàn)不佳。 範(fàn)例: 沒有異常處理:
print(10 / 0) # ZeroDivisionError: division by zero

使用異常處理:

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

  1. 改善使用者體驗(yàn) 正確處理的異常會(huì)提供有意義的錯(cuò)誤訊息,而不是神秘的系統(tǒng)錯(cuò)誤,從而使應(yīng)用程式更易於使用。 範(fàn)例:
try: age = int(input("輸入您的年齡:")) except ValueError: print("無(wú)效輸入!請(qǐng)輸入數(shù)字。")
  1. 保持應(yīng)用程式穩(wěn)定性 它允許應(yīng)用程式即使在遇到錯(cuò)誤後也能繼續(xù)運(yùn)行,從而確保穩(wěn)定性。 範(fàn)例:
def divide(a, b): try: return a / b except ZeroDivisionError: return "不允許除以零!"

print(divide(10, 2)) # 輸出:5.0 print(divide(10, 0)) # 輸出:不允許除以零!

  1. 處理極端情況 異常處理可讓您考慮不可預(yù)測(cè)的情況,例如網(wǎng)路故障、檔案遺失或無(wú)效使用者輸入。 範(fàn)例:
try: with open("data.txt", "r") as file: content = file.read() except FileNotFoundError: print("找不到該檔案。")
  1. 鼓勵(lì)寫簡(jiǎn)潔的程式碼
    透過(guò)將正常邏輯與錯(cuò)誤處理邏輯分開,異常處理使您的程式碼更易於閱讀、調(diào)試和維護(hù)。

  2. 促進(jìn)除錯(cuò)
    借助詳細(xì)的錯(cuò)誤訊息和異常日誌,開發(fā)人員可以快速識(shí)別和修復(fù)程式碼中的問題。
    例:

import logging

try: result = 10 / 0 except Exception as e: logging.error("發(fā)生錯(cuò)誤", exc_info=True)

  1. 對(duì)於關(guān)鍵系統(tǒng)至關(guān)重要 在可靠性至關(guān)重要的系統(tǒng)(例如銀行、醫(yī)療保健)中,異常處理對(duì)於確保安全地管理錯(cuò)誤而不會(huì)導(dǎo)致資料損壞或遺失是必要的。

結(jié)論

在程式設(shè)計(jì)術(shù)語(yǔ)中,錯(cuò)誤和異常大多時(shí)候可以互換使用。 Python 中錯(cuò)誤和異常之間的關(guān)鍵區(qū)別在於它們?nèi)绾斡绊懳覀兊能涹w程式。語(yǔ)法錯(cuò)誤和縮排錯(cuò)誤等錯(cuò)誤會(huì)在解釋器解析程式時(shí)使程式崩潰。另一方面,如果未正確處理異常,異常會(huì)在執(zhí)行時(shí)使程式崩潰。自訂異常透過(guò)使程式設(shè)計(jì)師能夠定義特定於特定軟體應(yīng)用程式的異常類別來(lái)擴(kuò)展錯(cuò)誤處理功能。

錯(cuò)誤處理對(duì)於除錯(cuò)也非常重要。它可以使我們看到應(yīng)用程式中發(fā)生錯(cuò)誤的原因,從而為軟體維護(hù)人員提供足夠的資訊來(lái)解決問題。請(qǐng)務(wù)必確保在程式碼中適當(dāng)?shù)匾氘惓L幚?,以確保軟體應(yīng)用程式的健全性。

感謝您的閱讀。

以上是Python 中的錯(cuò)誤處理:最佳實(shí)踐。探索如何有效處理異常的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

Python的UNITDEST或PYTEST框架如何促進(jìn)自動(dòng)測(cè)試? Python的UNITDEST或PYTEST框架如何促進(jìn)自動(dòng)測(cè)試? Jun 19, 2025 am 01:10 AM

Python的unittest和pytest是兩種廣泛使用的測(cè)試框架,它們都簡(jiǎn)化了自動(dòng)化測(cè)試的編寫、組織和運(yùn)行。 1.二者均支持自動(dòng)發(fā)現(xiàn)測(cè)試用例並提供清晰的測(cè)試結(jié)構(gòu):unittest通過(guò)繼承TestCase類並以test\_開頭的方法定義測(cè)試;pytest則更為簡(jiǎn)潔,只需以test\_開頭的函數(shù)即可。 2.它們都內(nèi)置斷言支持:unittest提供assertEqual、assertTrue等方法,而pytest使用增強(qiáng)版的assert語(yǔ)句,能自動(dòng)顯示失敗詳情。 3.均具備處理測(cè)試準(zhǔn)備與清理的機(jī)制:un

如何將Python用於數(shù)據(jù)分析和與Numpy和Pandas等文庫(kù)進(jìn)行操作? 如何將Python用於數(shù)據(jù)分析和與Numpy和Pandas等文庫(kù)進(jìn)行操作? Jun 19, 2025 am 01:04 AM

pythonisidealfordataanalysisionduetonumpyandpandas.1)numpyExccelSatnumericalComputationswithFast,多dimensionalArraysAndRaysAndOrsAndOrsAndOffectorizedOperationsLikenp.sqrt()

什麼是動(dòng)態(tài)編程技術(shù),如何在Python中使用它們? 什麼是動(dòng)態(tài)編程技術(shù),如何在Python中使用它們? Jun 20, 2025 am 12:57 AM

動(dòng)態(tài)規(guī)劃(DP)通過(guò)將復(fù)雜問題分解為更簡(jiǎn)單的子問題並存儲(chǔ)其結(jié)果以避免重複計(jì)算,來(lái)優(yōu)化求解過(guò)程。主要方法有兩種:1.自頂向下(記憶化):遞歸分解問題,使用緩存存儲(chǔ)中間結(jié)果;2.自底向上(表格化):從基礎(chǔ)情況開始迭代構(gòu)建解決方案。適用於需要最大/最小值、最優(yōu)解或存在重疊子問題的場(chǎng)景,如斐波那契數(shù)列、背包問題等。在Python中,可通過(guò)裝飾器或數(shù)組實(shí)現(xiàn),並應(yīng)注意識(shí)別遞推關(guān)係、定義基準(zhǔn)情況及優(yōu)化空間複雜度。

如何使用__ITER__和__NEXT __在Python中實(shí)現(xiàn)自定義迭代器? 如何使用__ITER__和__NEXT __在Python中實(shí)現(xiàn)自定義迭代器? Jun 19, 2025 am 01:12 AM

要實(shí)現(xiàn)自定義迭代器,需在類中定義__iter__和__next__方法。 ①__iter__方法返回迭代器對(duì)象自身,通常為self,以兼容for循環(huán)等迭代環(huán)境;②__next__方法控制每次迭代的值,返回序列中的下一個(gè)元素,當(dāng)無(wú)更多項(xiàng)時(shí)應(yīng)拋出StopIteration異常;③需正確跟蹤狀態(tài)並設(shè)置終止條件,避免無(wú)限循環(huán);④可封裝複雜邏輯如文件行過(guò)濾,同時(shí)注意資源清理與內(nèi)存管理;⑤對(duì)簡(jiǎn)單邏輯可考慮使用生成器函數(shù)yield替代,但需結(jié)合具體場(chǎng)景選擇合適方式。

Python編程語(yǔ)言及其生態(tài)系統(tǒng)的新興趨勢(shì)或未來(lái)方向是什麼? Python編程語(yǔ)言及其生態(tài)系統(tǒng)的新興趨勢(shì)或未來(lái)方向是什麼? Jun 19, 2025 am 01:09 AM

Python的未來(lái)趨勢(shì)包括性能優(yōu)化、更強(qiáng)的類型提示、替代運(yùn)行時(shí)的興起及AI/ML領(lǐng)域的持續(xù)增長(zhǎng)。首先,CPython持續(xù)優(yōu)化,通過(guò)更快的啟動(dòng)時(shí)間、函數(shù)調(diào)用優(yōu)化及擬議中的整數(shù)操作改進(jìn)提升性能;其次,類型提示深度集成至語(yǔ)言與工具鏈,增強(qiáng)代碼安全性與開發(fā)體驗(yàn);第三,PyScript、Nuitka等替代運(yùn)行時(shí)提供新功能與性能優(yōu)勢(shì);最後,AI與數(shù)據(jù)科學(xué)領(lǐng)域持續(xù)擴(kuò)張,新興庫(kù)推動(dòng)更高效的開發(fā)與集成。這些趨勢(shì)表明Python正不斷適應(yīng)技術(shù)變化,保持其領(lǐng)先地位。

如何使用插座在Python中執(zhí)行網(wǎng)絡(luò)編程? 如何使用插座在Python中執(zhí)行網(wǎng)絡(luò)編程? Jun 20, 2025 am 12:56 AM

Python的socket模塊是網(wǎng)絡(luò)編程的基礎(chǔ),提供低級(jí)網(wǎng)絡(luò)通信功能,適用於構(gòu)建客戶端和服務(wù)器應(yīng)用。要設(shè)置基本TCP服務(wù)器,需使用socket.socket()創(chuàng)建對(duì)象,綁定地址和端口,調(diào)用.listen()監(jiān)聽連接,並通過(guò).accept()接受客戶端連接。構(gòu)建TCP客戶端需創(chuàng)建socket對(duì)像後調(diào)用.connect()連接服務(wù)器,再使用.sendall()發(fā)送數(shù)據(jù)和??.recv()接收響應(yīng)。處理多個(gè)客戶端可通過(guò)1.線程:每次連接啟動(dòng)新線程;2.異步I/O:如asyncio庫(kù)實(shí)現(xiàn)無(wú)阻塞通信。注意事

如何在Python中切片列表? 如何在Python中切片列表? Jun 20, 2025 am 12:51 AM

Python列表切片的核心答案是掌握[start:end:step]語(yǔ)法並理解其行為。 1.列表切片的基本格式為list[start:end:step],其中start是起始索引(包含)、end是結(jié)束索引(不包含)、step是步長(zhǎng);2.省略start默認(rèn)從0開始,省略end默認(rèn)到末尾,省略step默認(rèn)為1;3.獲取前n項(xiàng)用my_list[:n],獲取後n項(xiàng)用my_list[-n:];4.使用step可跳過(guò)元素,如my_list[::2]取偶數(shù)位,負(fù)step值可反轉(zhuǎn)列表;5.常見誤區(qū)包括end索引不

如何使用DateTime模塊在Python中使用日期和時(shí)間? 如何使用DateTime模塊在Python中使用日期和時(shí)間? Jun 20, 2025 am 12:58 AM

Python的datetime模塊能滿足基本的日期和時(shí)間處理需求。 1.可通過(guò)datetime.now()獲取當(dāng)前日期和時(shí)間,也可分別提取.date()和.time()。 2.能手動(dòng)創(chuàng)建特定日期時(shí)間對(duì)象,如datetime(year=2025,month=12,day=25,hour=18,minute=30)。 3.使用.strftime()按格式輸出字符串,常見代碼包括%Y、%m、%d、%H、%M、%S;用strptime()將字符串解析為datetime對(duì)象。 4.利用timedelta進(jìn)行日期運(yùn)

See all articles