7. 例外處理
- 2. 7. 例外處理
• 學習目標
– 使用 try、except 處理
例外
– 認識例外繼承架構
– 認識 raise 使用時機
– 運用 finally 清除資源
– 使用 with as 管理資源
2
- 5. • 嘗試執行 try 區塊中的程式碼
• 如果發生例外,執行流程會跳離例外發生
點,然後比對 except 宣告的型態
• 如果符合引發的例外物件型態,就執行
except 區塊中的程式碼
5
- 6. • 在 Python 中,例外並不一定是錯誤
• 使用 for in 語法時,其實底層就運用到
了例外處理機制
• 只要是具有 __iter__() 方法的物件,都
可以使用 for in 來迭代
• 沒有下一個元素時, 會引發
StopIteration 例外
6
- 7. • 可以使用 iter() 方法呼叫物件上的
__iter__() 取得迭代器
• 可以使用 next() 來呼叫迭代器的
__next__()方法
7
- 8. • for in 會在遇到 StopIteration 時,
靜靜地結束迭代
8
- 9. • except 之後可以使用 tuple 指定多個物件,
也可以有多個except
• 如果沒有指定 except 後的物件型態,表示
捕捉所有引發的物件
9
- 23. • 可以為自己的 API 建立一個根例外,商務
相關的例外都可以衍生自這個根例外
• 這可以方便 API 使用者必要時,在 except
時使用你的根例外來處理 API 相關的例外
23
- 29. Python 例外風格
• 在Python 中,例外並不一定是錯誤
• SystemExit、GeneratorExit、
KeyboardInterrupt、
StopIteration
• 更像是一種事件,代表著流程因為某個原
因無法繼續而必須中斷
29
- 36. • 對一個未被比對到的例外,python 直譯
器最後會呼叫 sys.excepthook() 並傳
入三個引數
– 例外類別、實例與 traceback 物件
• 如果想要自訂 sys.excepthook() 被呼
叫時的行為,也可以自行指定一個可接受
三個引數的函式給 sys.excepthook
36
- 43. • 如果不想在執行 python 直譯器時加上-
W 指定, 也可以設定 PYTHONWARNINGS
環境變數
• 若已經設定PYTHONWARNINGS 環境變數,
執行時又自行加上-W 指定,則使用-W 的
指定
43
- 60. • with as 語法是用來表示,其區塊是處於
某個特殊的情境之中
• 處於自動關閉檔案的情境是其中一種情況
• 使用 @contextmanager 實作函式時,
yield 的前後建立了with 區塊的情境
60