本站電子書

您可以在這些電子書店找到本站電子書: Google Play 圖書iBooks StoreHyReadReadmooPubu
===>>>本站推出學習遊戲意見調查<<<===《如何自學程式設計》入選 Google Play 台灣地區2016年度最佳書籍

Python 3.1 快速導覽 - 例外處理 try-except陳述

大部分執行中的錯誤, Python 直譯器 (interpreter) 會以發起例外 (exception) 的方式來中斷程式的執行。實際上,很多情況下我們需要自行控制可能會產生例外的程式碼,因為例外並不全然是程式的邏輯錯誤,例如程式中打算開啟檔案,然而實際檔名並不存在,這種情況下,我們需要的是例外發生後的處理動作,而非中止程式的執行。



凡是可能會產生例外的程式碼, Python 利用 try-except 陳述 (try-except statement) 讓程式設計師自行處理例外。 try-except 為關鍵字 (keyword) 之一,專門用來例外處理 (exception handling) 的。


基本形式就是把可能會產生例外的程式碼放在 try 之後的程式區塊 (block) , except 則放例外發生時的處置,如下例
a = 22
b = 33

try:
    if a < b:
        print(n)
except:
    print("except")

print("after exception....")

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:err04.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月 


執行後結果如下



由於第 6 行,這裡原本會產生 NameError ,但因為有 try-except 的例外處理,所以發生例外是執行 except 部份印出 "except" 的字串 (string) 。


如果沒有處理例外,程式執行到
print(n)


就會停止,而最後 "after exception...." 的字串也不會被印出。


例外的名稱也可以寫在 except 之後,如
except NameError:


如果一段程式碼有可能會發生多種例外,這樣的寫法可以分別處理不同種類的例外。


try-except 也可以和 else 連用, else 後的程式區塊放的是沒有發生例外,程式所執行的工作,例如
a = 22
b = 33

try:
    if a > b:
        print(n)
except:
    print("except")
else:
    print("else except")

print("after exception....")

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:err05.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月 


執行後結果如下



這裡因為 a > b 為假,所以例外不會發生,因此程式執行 else 的部份。


若加入另一個關鍵字 finally ,無論例外有沒有發生都會執行 finally 後的程式區塊。例如
a = 22
b = 33

try:
    if a < b:
        print(n)
except:
    print("except")
else:
    print("else except")
finally:
    print("finally")

print("after exception....")

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:err06.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月 


執行後結果如下



中英文術語對照
直譯器interpreter
例外exception
try-except 陳述try-except statement
關鍵字keyword
例外處理exception handling
區塊block
字串string






沒有留言: