Python的異常處理機制允許你在程序運行時處理可能出現的錯誤,從而防止程序崩潰。通過使用異常處理,可以在出錯的情況下給出適當的處理方案或提示信息。
Python使用try-except
結構來處理異常。基本的語法如下:
try:
# 可能發生異常的代碼
except SomeException:
# 當異常發生時的處理代碼
其中:
try
:放置可能會引發異常的代碼。except
:捕捉異常並執行相應的代碼處理。SomeException
:具體的異常類型(如ZeroDivisionError
、ValueError
等)。如果不指定異常類型,則會捕獲所有異常。你可以捕捉具體的異常類型,這樣當發生該類型的異常時,程序不會崩潰,而是進行處理。
try:
result = 10 / 0
except ZeroDivisionError:
print("不能除以零")
如果你想處理多種不同類型的異常,可以在except
後面列出多個異常類型。
TypeError
):try:
result = 10 / "2" # 這裡會引發 TypeError
except (ZeroDivisionError, TypeError):
print("捕獲到除零或類型錯誤異常")
如果你不確定會發生哪些異常,可以使用不指定具體異常類型的except
,這會捕獲所有異常。
try:
result = 10 / 0
except:
print("捕獲到一個異常")
這樣的做法會捕捉所有的異常,但通常不推薦,因為這會讓異常處理過於模糊,難以排查具體問題。
else
子句else
子句在沒有異常發生時執行,與try
中的代碼一起運行。
try:
result = 10 / 2
except ZeroDivisionError:
print("不能除以零")
else:
print(f"結果是: {result}") # 如果沒有異常,這裡會執行
finally
子句finally
子句中的代碼無論是否發生異常都會執行,常用於資源的清理(如關閉文件或釋放內存)。
try:
file = open('example.txt', 'r')
content = file.read()
except FileNotFoundError:
print("文件不存在")
finally:
file.close() # 無論是否有異常,最終都會關閉文件
除了Python的內建異常,你還可以自定義自己的異常類型,使用raise
關鍵字來主動引發異常。
class CustomError(Exception):
"""自定義異常類型"""
pass
def check_value(x):
if x < 0:
raise CustomError("x 不能是負數")
try:
check_value(-5)
except CustomError as e:
print(f"捕獲到自定義異常: {e}")
你可以使用except Exception as e
來捕獲異常對象e
,然後打印異常的具體信息。
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"異常發生: {e}") # 打印具體的異常信息
raise
用於重新引發異常在某些情況下,你可能想捕獲異常後再重新引發它,可以使用raise
關鍵字來做到這一點。
try:
result = 10 / 0
except ZeroDivisionError:
print("處理除零異常")
raise # 重新引發異常
這樣異常會再次被傳遞,並在更高層次的代碼中處理。
以下是一些常見的 Python 異常類型:
ZeroDivisionError
:除數為零時引發。ValueError
:傳遞的值類型不正確時引發。TypeError
:操作或函數應用於不適合的數據類型時引發。FileNotFoundError
:打開的文件不存在時引發。IndexError
:當序列索引超出範圍時引發。KeyError
:當字典中查找一個不存在的鍵時引發。AttributeError
:當對象沒有某個屬性時引發。