iT邦幫忙

2024 iThome 鐵人賽

DAY 14
1

Python的異常處理機制允許你在程序運行時處理可能出現的錯誤,從而防止程序崩潰。通過使用異常處理,可以在出錯的情況下給出適當的處理方案或提示信息。

基本異常處理語法

Python使用try-except結構來處理異常。基本的語法如下:

try:
    # 可能發生異常的代碼
except SomeException:
    # 當異常發生時的處理代碼

其中:

  • try:放置可能會引發異常的代碼。
  • except:捕捉異常並執行相應的代碼處理。
  • SomeException:具體的異常類型(如ZeroDivisionErrorValueError 等)。如果不指定異常類型,則會捕獲所有異常。

壹、捕獲具體異常

你可以捕捉具體的異常類型,這樣當發生該類型的異常時,程序不會崩潰,而是進行處理。

  • 處理除零異常 (ZeroDivisionError):
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 異常

以下是一些常見的 Python 異常類型:

  • ZeroDivisionError:除數為零時引發。
  • ValueError:傳遞的值類型不正確時引發。
  • TypeError:操作或函數應用於不適合的數據類型時引發。
  • FileNotFoundError:打開的文件不存在時引發。
  • IndexError:當序列索引超出範圍時引發。
  • KeyError:當字典中查找一個不存在的鍵時引發。
  • AttributeError:當對象沒有某個屬性時引發。

上一篇
第13天:列表推導式
下一篇
第15天:類和對象
系列文
python30天入門學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言