提高程式穩定性: 防止程式因未預期的錯誤而崩潰。
提供友善的錯誤訊息: 讓使用者更容易理解錯誤原因。
實現錯誤恢復: 在發生錯誤時,程式可以嘗試進行修復或採取替代措施。
try:
# 可能發生錯誤的程式碼
except ExceptionType:
# 處理特定類型的例外
try: 包含可能產生例外的程式碼。
except: 如果 try 區塊中的程式碼發生了指定的 ExceptionType 類型的例外,則執行 except 區塊中的程式碼。
example:
try:
# 可能發生錯誤的程式碼
except ExceptionType:
# 處理特定類型的例外
多個 except 區塊: 可以使用多個 except 區塊來處理不同的例外類型。
else 區塊: 如果 try 區塊中的程式碼沒有發生任何例外,則執行 else 區塊中的程式碼。
finally 區塊: 不論是否發生例外,finally 區塊中的程式碼都會執行,通常用於清理資源。
更多用法
多個 except 區塊: 可以使用多個 except 區塊來處理不同的例外類型。
else 區塊: 如果 try 區塊中的程式碼沒有發生任何例外,則執行 else 區塊中的程式碼。
finally 區塊: 不論是否發生例外,finally 區塊中的程式碼都會執行,通常用於清理資源。
例外類型 | 說明 | 代碼範例 | 錯誤訊息(可能顯示) |
---|---|---|---|
ValueError |
當函數接收到正確型別但不適當的值時拋出。 | int("abc") |
ValueError: invalid literal for int() with base 10 |
TypeError |
當操作或函數應用於不支援的資料型別時拋出。 | 1 + "a" |
TypeError: unsupported operand type(s) for + |
IndexError |
當試圖存取串列中不存在的索引時拋出。 | [1, 2, 3][3] |
IndexError: list index out of range |
KeyError |
當試圖存取字典中不存在的鍵時拋出。 | {"a": 1}["b"] |
KeyError: 'b' |
AttributeError |
當屬性引用或方法應用於不支援的對象時拋出。 | "hello".non_existent_method() |
AttributeError: 'str' object has no attribute |
NameError |
當引用尚未定義的變數或函數時拋出。 | print(unknown_var) |
NameError: name 'unknown_var' is not defined |
ZeroDivisionError |
當試圖將數字除以零時拋出。 | 1 / 0 |
ZeroDivisionError: division by zero |
FileNotFoundError |
當嘗試打開不存在的檔案時拋出。 | open("nonexistent.txt") |
FileNotFoundError: No such file or directory |
IOError |
通用的輸入/輸出錯誤。 | open("nonexistent.txt") |
IOError: No such file or directory |
ImportError |
當導入模組失敗或找不到模組時拋出。 | import nonexistent_module |
ImportError: No module named 'nonexistent_module' |
RuntimeError |
通用的一般錯誤。 | raise RuntimeError("general error") |
RuntimeError: general error |
StopIteration |
用迭代器時,當無更多項目可迭代時拋出。 | next(iter([])) |
StopIteration |
IndentationError |
當程式碼縮排格式不正確時拋出。 | def func():\nprint("hi") (無縮排) |
IndentationError: expected an indented block |
SyntaxError |
當程式碼語法錯誤無法執行時拋出。 | print("hello (無閉合引號) |
SyntaxError: EOL while scanning string literal |