Python中try用法、內(nèi)置異常類型與自定義異常類型拓展案例詳解
try介紹與語法格式
在 Python 里,try 語句主要用于異常處理,其作用是捕獲并處理代碼運行期間可能出現(xiàn)的異常,避免程序因異常而意外終止。try 語句通常會和 except、else 以及 finally 子句搭配使用。具體語法框架如下:
try:
# 可能會引發(fā)異常的代碼塊
pass
except ExceptionType1:
# 處理特定類型異常的代碼塊
pass
except ExceptionType2:
# 處理另一種特定類型異常的代碼塊
pass
else:
# 當(dāng) try 代碼塊沒有引發(fā)異常時執(zhí)行的代碼塊
pass
finally:
# 無論 try 代碼塊是否引發(fā)異常,都會執(zhí)行的代碼塊
pass在 Python 里,pass 是一個空語句,它不執(zhí)行任何操作,主要用于占位,保證代碼的語法完整性。
try具體使用案例
下面結(jié)合前面讀取 .xlsx 文件的代碼詳細講解其用法:
import openpyxl
def read_xlsx(file_path):
try:
# 以二進制模式打開 .xlsx 文件
workbook = openpyxl.load_workbook(file_path)
# 獲取活動工作表
sheet = workbook.active
# 遍歷工作表中的每一行
for row in sheet.iter_rows(values_only=True):
print(row)
except FileNotFoundError:
print(f"錯誤:未找到文件 {file_path}。")
except Exception as e:
print(f"發(fā)生未知錯誤:{e}")
if __name__ == "__main__":
file_path = 'example.xlsx'
read_xlsx(file_path)try代碼塊包含了可能會引發(fā)異常的代碼。在這個例子中,openpyxl.load_workbook(file_path)- 嘗試打開指定路徑的
.xlsx文件,若文件不存在或者文件格式有誤,就可能會引發(fā)異常。 - 后續(xù)的代碼如獲取活動工作表和遍歷工作表中的行,在文件打開成功后執(zhí)行,同樣可能會因為文件內(nèi)容不規(guī)范等原因引發(fā)異常。
except FileNotFoundError:專門處理FileNotFoundError異常,也就是當(dāng)指定的文件不存在時,會執(zhí)行該代碼塊中的語句,打印出錯誤信息。except Exception as e:這是一個通用的異常處理塊,會捕獲除FileNotFoundError之外的其他所有異常,并將異常信息存儲在變量e中,然后打印出未知錯誤信息。
except的異常類型
簡介
在 Python 里,try-except 語句會依據(jù) try 代碼塊拋出的異常類型來判定執(zhí)行哪個 except 子句。當(dāng) try 代碼塊出現(xiàn)異常時,Python 會按順序檢查每個 except 子句,查看其指定的異常類型是否與拋出的異常類型相匹配。若匹配成功,就會執(zhí)行該 except 子句里的代碼。
案例
下面給出一個示例,借助打印信息來明確執(zhí)行了哪個 except 子句:
try:
# 可能會引發(fā)異常的代碼塊
result = 1 / 0 # 這里會引發(fā) ZeroDivisionError
except ZeroDivisionError:
# 處理特定類型異常的代碼塊
print("執(zhí)行了 ZeroDivisionError 異常處理")
except ValueError:
# 處理另一種特定類型異常的代碼塊
print("執(zhí)行了 ValueError 異常處理")
else:
# 當(dāng) try 代碼塊沒有引發(fā)異常時執(zhí)行的代碼塊
print("try 代碼塊沒有引發(fā)異常")
finally:
# 無論 try 代碼塊是否引發(fā)異常,都會執(zhí)行的代碼塊
print("finally 代碼塊始終會執(zhí)行")在這個示例中,try 代碼塊里的 1 / 0 會引發(fā) ZeroDivisionError 異常。所以,Python 會檢查各個 except 子句,發(fā)現(xiàn) ZeroDivisionError 匹配第一個 except 子句,進而執(zhí)行該子句里的代碼,輸出 “執(zhí)行了 ZeroDivisionError 異常處理”。
內(nèi)置的常見異常類型
以下是Python中常見的可被except捕獲的內(nèi)置異常類型匯總表格(基于Exception基類體系):

自定義異常類型
自定義異常需要繼承自 Python 的內(nèi)置異常類,通常是 Exception 類。下面是一個自定義異常的示例:
# 定義一個自定義異常類
class MyCustomError(Exception):
pass
try:
# 模擬拋出自定義異常
raise MyCustomError("這是一個自定義異常")
except MyCustomError as e:
print(f"捕獲到自定義異常: {e}")在上述代碼中,MyCustomError 是自定義的異常類,它繼承自 Exception 類。在 try 代碼塊中使用 raise 關(guān)鍵字拋出這個自定義異常,然后在 except 語句中捕獲并處理它。
繼承關(guān)系
Exception 類繼承自 BaseException,不過像 SystemExit、KeyboardInterrupt 和 GeneratorExit 這類系統(tǒng)退出相關(guān)的異常直接繼承自 BaseException,而非 Exception。這意味著 Exception 類涵蓋的是常規(guī)的程序運行時錯誤,并非用于處理系統(tǒng)層面的退出事件。
用途
- 捕獲通用異常:在編寫代碼時,若不確定會出現(xiàn)哪種具體的異常,可使用
Exception類來捕獲所有常規(guī)異常。 - 創(chuàng)建自定義異常:可以通過繼承
Exception類來創(chuàng)建自定義的異常類,從而在特定場景下拋出這些自定義異常。
注意事項
- 慎用
except Exception:雖然except Exception能捕獲所有常規(guī)異常,但可能會掩蓋一些本應(yīng)被關(guān)注的特定異常,使調(diào)試變得困難。因此,在可能的情況下,最好捕獲具體的異常類型。 - 自定義異常的命名:自定義異常類的命名應(yīng)清晰地反映其用途,通常以
Error結(jié)尾,比如DatabaseError、ValidationError等。
到此這篇關(guān)于Python中try用法、內(nèi)置異常類型與自定義異常類型拓展的文章就介紹到這了,更多相關(guān)Python try用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在多種情況/開發(fā)環(huán)境中運行python腳本和代碼的技巧分享
Python腳本或程序是包含可執(zhí)行Python代碼的文件,能夠運行Python腳本和代碼可能是您作為Python開發(fā)人員所需的最重要的技能,在本教程中,您將學(xué)習(xí)一些運行Python腳本和代碼的技術(shù),在每種情況下使用的技術(shù)將取決于您的環(huán)境、平臺、需求和技能2023-11-11
淺談Python2.6和Python3.0中八進制數(shù)字表示的區(qū)別
下面小編就為大家?guī)硪黄獪\談Python2.6和Python3.0中八進制數(shù)字表示的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
Python處理數(shù)據(jù)之匹配兩個Excel文件數(shù)據(jù)的實現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Python處理數(shù)據(jù)之匹配兩個Excel文件數(shù)據(jù)的實現(xiàn)方法,可以使用Python的Pandas庫來實現(xiàn)兩層循環(huán)匹配兩個Excel文件,需要的朋友可以參考下2023-09-09
python中Matplotlib實現(xiàn)繪制3D圖的示例代碼
本篇文章主要介紹了python中Matplotlib實現(xiàn)繪制3D圖的示例代碼,具有一定的參考價值,有興趣的可以了解一下2017-09-09

