例外處理 (exception handling) 是利用 try 、 except 、 finally 及 else 構成的複合陳述 (statement) ,所謂例外 (exception) 是指已知有可能發生的錯誤 (error) ,像是開啟檔案,檔案卻不存在,或除數為 0 等等的情況。所有可能發生例外的程式碼 (code) 都要放在 try 底下的程式區塊 (block) , except 後空一格接例外類別 (class) ,底下程式區塊做相對應的例外處理,而 else 的部分則是假設沒有例外發生的處理,最後 finally 是例外處理結束後,無論如何都會執行的部分。
除數為 0 是種已知錯誤,這錯誤可由內建的例外類別 ZeroDivisionError 偵測到,所有內建例外類別都繼承自 BaseException 類別,這邊可以看到當除數為 0 的例外發生後,直譯器 (interpreter) 就會跳到 except ZeroDivisionError 的部分將變數 (variable) a 設定為整數 0 ,注意 try 及 except 最後都要加上分號
try:
a = 1 / 0
except ZeroDivisionError:
a = 0
print(a)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:try01.py
# 功能:示範 try 陳述
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 try01.py |
0 |
$ |
如果要處理沒有列舉出的例外,就要在 try 底下放一個不接任何例外的 except ,這個例子是用 raise 發起 Exception 例外,由於不是 ZeroDivisionError ,因此變數 a 被設定為整數 2
try:
a = 1 / 1
raise Exception
except ZeroDivisionError:
a = 0
except:
a = -1
print(a)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:try02.py
# 功能:示範 try 陳述
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 try02.py |
-1 |
$ |
try-except 底下可以放 else 陳述, else 處理例外沒有發生的情況, else 可有可無,此例 1 除以 1 不會發生例外,因此變數 m 被設定為字串 (string) "Good!"
try:
a = 1 / 1
except:
a = 0
else:
m = "Good!"
print(a)
print(m)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:try03.py
# 功能:示範 try 陳述
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 try03.py |
1.0 |
Good! |
$ |
finally 放在 try-except 複合陳述最底下的部分,這部分同樣可有可無, finally 是例外處理結束後一定會執行的部分,此例也可以看到當例外發生後, else 的部分不會執行,因此變數 m 並沒有被設定
m = "Something happened."
try:
a = 1 / 0
except:
a = 0
else:
m = "Good!"
finally:
print("Everything is done.")
print(a)
print(m)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:try04.py
# 功能:示範 try 陳述
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 try04.py |
"Everything is done." |
0 |
Something happened. |
$ |
相關教學影片