SlideShare a Scribd company logo
Submit Search
Upload
例外處理
Report
Share
Justin Lin
Technology / Community Evangelist at Free lancer
Follow
•
2 likes
•
1,401 views
1
of
62
例外處理
•
2 likes
•
1,401 views
Report
Share
Download Now
Download to read offline
Software
《Python 3.5 技術手冊》第 7 章投影片
Read more
Justin Lin
Technology / Community Evangelist at Free lancer
Follow
Recommended
Java SE 8 技術手冊第 8 章 - 例外處理 by
Java SE 8 技術手冊第 8 章 - 例外處理
Justin Lin
3.2K views
•
70 slides
流程語法與函式 by
流程語法與函式
Justin Lin
2.6K views
•
56 slides
例外處理 by
例外處理
Justin Lin
299 views
•
64 slides
Java SE 7 技術手冊投影片第 08 章 - 例外處理 by
Java SE 7 技術手冊投影片第 08 章 - 例外處理
Justin Lin
2.4K views
•
56 slides
7. 例外處理 by
7. 例外處理
Justin Lin
115 views
•
64 slides
並行與平行 by
並行與平行
Justin Lin
2.7K views
•
45 slides
More Related Content
What's hot
流程語法與函式 by
流程語法與函式
Justin Lin
509 views
•
71 slides
11, exceptions by
11, exceptions
ted-xu
224 views
•
19 slides
例外處理 by
例外處理
Justin Lin
540 views
•
73 slides
CH08:例外處理 by
CH08:例外處理
Justin Lin
233 views
•
55 slides
Java SE 8 技術手冊第 11 章 - 執行緒與並行API by
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
3.7K views
•
133 slides
CH11:執行緒與並行API by
CH11:執行緒與並行API
Justin Lin
320 views
•
89 slides
What's hot
(20)
流程語法與函式 by Justin Lin
流程語法與函式
Justin Lin
•
509 views
11, exceptions by ted-xu
11, exceptions
ted-xu
•
224 views
例外處理 by Justin Lin
例外處理
Justin Lin
•
540 views
CH08:例外處理 by Justin Lin
CH08:例外處理
Justin Lin
•
233 views
Java SE 8 技術手冊第 11 章 - 執行緒與並行API by Justin Lin
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
•
3.7K views
CH11:執行緒與並行API by Justin Lin
CH11:執行緒與並行API
Justin Lin
•
320 views
Java SE 8 技術手冊第 5 章 - 物件封裝 by Justin Lin
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
•
3.4K views
從模組到類別 by Justin Lin
從模組到類別
Justin Lin
•
500 views
9. meta-programming by Justin Lin
9. meta-programming
Justin Lin
•
363 views
從模組到類別 by Justin Lin
從模組到類別
Justin Lin
•
1.7K views
型態與運算子 by Justin Lin
型態與運算子
Justin Lin
•
1.8K views
資料永續與交換 by Justin Lin
資料永續與交換
Justin Lin
•
1.8K views
12, string by ted-xu
12, string
ted-xu
•
397 views
Java SE 8 技術手冊第 4 章 - 認識物件 by Justin Lin
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
•
4.2K views
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API by Justin Lin
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
•
3.1K views
從 REPL 到 IDE by Justin Lin
從 REPL 到 IDE
Justin Lin
•
2.3K views
5. 建構式、原型與類別 by Justin Lin
5. 建構式、原型與類別
Justin Lin
•
205 views
如何用JDK8實作一個小型的關聯式資料庫系統 by なおき きしだ
如何用JDK8實作一個小型的關聯式資料庫系統
なおき きしだ
•
18.7K views
型態與運算子 by Justin Lin
型態與運算子
Justin Lin
•
702 views
Java SE 8 技術手冊第 2 章 - 從JDK到IDE by Justin Lin
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
•
5.3K views
Viewers also liked
資料結構 by
資料結構
Justin Lin
1.8K views
•
62 slides
open() 與 io 模組 by
open() 與 io 模組
Justin Lin
1.8K views
•
40 slides
網站系統安全及資料保護設計認知 by
網站系統安全及資料保護設計認知
Justin Lin
3.8K views
•
97 slides
Python 起步走 by
Python 起步走
Justin Lin
7.2K views
•
26 slides
OpenSCAD Workshop by
OpenSCAD Workshop
Justin Lin
2.1K views
•
56 slides
Python 3 Programming Language by
Python 3 Programming Language
Tahani Al-Manie
11.5K views
•
57 slides
Viewers also liked
(17)
資料結構 by Justin Lin
資料結構
Justin Lin
•
1.8K views
open() 與 io 模組 by Justin Lin
open() 與 io 模組
Justin Lin
•
1.8K views
網站系統安全及資料保護設計認知 by Justin Lin
網站系統安全及資料保護設計認知
Justin Lin
•
3.8K views
Python 起步走 by Justin Lin
Python 起步走
Justin Lin
•
7.2K views
OpenSCAD Workshop by Justin Lin
OpenSCAD Workshop
Justin Lin
•
2.1K views
Python 3 Programming Language by Tahani Al-Manie
Python 3 Programming Language
Tahani Al-Manie
•
11.5K views
類別的繼承 by Justin Lin
類別的繼承
Justin Lin
•
1.4K views
除錯、測試與效能 by Justin Lin
除錯、測試與效能
Justin Lin
•
1.7K views
Python Programming Essentials - M44 - Overview of Web Development by P3 InfoTech Solutions Pvt. Ltd.
Python Programming Essentials - M44 - Overview of Web Development
P3 InfoTech Solutions Pvt. Ltd.
•
1.8K views
《Python 3.5 技術手冊》第二章草稿 by Justin Lin
《Python 3.5 技術手冊》第二章草稿
Justin Lin
•
4.5K views
Python by Shivam Gupta
Python
Shivam Gupta
•
36.9K views
Python Programming Essentials - M22 - File Operations by P3 InfoTech Solutions Pvt. Ltd.
Python Programming Essentials - M22 - File Operations
P3 InfoTech Solutions Pvt. Ltd.
•
1.5K views
PyCon Taiwan 2013 Tutorial by Justin Lin
PyCon Taiwan 2013 Tutorial
Justin Lin
•
290.9K views
3D 之邏輯與美感交會 - OpenSCAD by Justin Lin
3D 之邏輯與美感交會 - OpenSCAD
Justin Lin
•
1.4K views
常用內建模組 by Justin Lin
常用內建模組
Justin Lin
•
1.4K views
進階主題 by Justin Lin
進階主題
Justin Lin
•
3K views
初學R語言的60分鐘 by Chen-Pan Liao
初學R語言的60分鐘
Chen-Pan Liao
•
139.8K views
Similar to 例外處理
Java_04:例外異常處理機制 by
Java_04:例外異常處理機制
Brad Chao
242 views
•
17 slides
TensorFlow 深度學習快速上手班--深度學習 by
TensorFlow 深度學習快速上手班--深度學習
Mark Chang
5.3K views
•
66 slides
Refactoring with Patterns in PHP by
Refactoring with Patterns in PHP
Jace Ju
3.8K views
•
32 slides
例外處理與單元測試 by
例外處理與單元測試
國昭 張
735 views
•
80 slides
SCJP ch14 by
SCJP ch14
r82093403
555 views
•
122 slides
Tip for Editors by
Tip for Editors
Chun-Yu Tseng
1.2K views
•
69 slides
Similar to 例外處理
(9)
Java_04:例外異常處理機制 by Brad Chao
Java_04:例外異常處理機制
Brad Chao
•
242 views
TensorFlow 深度學習快速上手班--深度學習 by Mark Chang
TensorFlow 深度學習快速上手班--深度學習
Mark Chang
•
5.3K views
Refactoring with Patterns in PHP by Jace Ju
Refactoring with Patterns in PHP
Jace Ju
•
3.8K views
例外處理與單元測試 by 國昭 張
例外處理與單元測試
國昭 張
•
735 views
SCJP ch14 by r82093403
SCJP ch14
r82093403
•
555 views
Tip for Editors by Chun-Yu Tseng
Tip for Editors
Chun-Yu Tseng
•
1.2K views
使用 Pytest 進行單元測試 (PyCon TW 2021) by Max Lai
使用 Pytest 進行單元測試 (PyCon TW 2021)
Max Lai
•
1.9K views
2, object oriented programming by ted-xu
2, object oriented programming
ted-xu
•
290 views
Clean code ch7_exception by ssuser27764c
Clean code ch7_exception
ssuser27764c
•
6 views
More from Justin Lin
Ch14 簡介 Spring Boot by
Ch14 簡介 Spring Boot
Justin Lin
872 views
•
22 slides
Ch13 整合 Spring MVC/Security by
Ch13 整合 Spring MVC/Security
Justin Lin
280 views
•
58 slides
Ch12 Spring 起步走 by
Ch12 Spring 起步走
Justin Lin
274 views
•
31 slides
Ch11 簡介 JavaMail by
Ch11 簡介 JavaMail
Justin Lin
157 views
•
8 slides
Ch10 Web 容器安全管理 by
Ch10 Web 容器安全管理
Justin Lin
153 views
•
30 slides
Ch09 整合資料庫 by
Ch09 整合資料庫
Justin Lin
233 views
•
92 slides
More from Justin Lin
(20)
Ch14 簡介 Spring Boot by Justin Lin
Ch14 簡介 Spring Boot
Justin Lin
•
872 views
Ch13 整合 Spring MVC/Security by Justin Lin
Ch13 整合 Spring MVC/Security
Justin Lin
•
280 views
Ch12 Spring 起步走 by Justin Lin
Ch12 Spring 起步走
Justin Lin
•
274 views
Ch11 簡介 JavaMail by Justin Lin
Ch11 簡介 JavaMail
Justin Lin
•
157 views
Ch10 Web 容器安全管理 by Justin Lin
Ch10 Web 容器安全管理
Justin Lin
•
153 views
Ch09 整合資料庫 by Justin Lin
Ch09 整合資料庫
Justin Lin
•
233 views
Ch08 自訂標籤 by Justin Lin
Ch08 自訂標籤
Justin Lin
•
133 views
Ch07 使用 JSTL by Justin Lin
Ch07 使用 JSTL
Justin Lin
•
161 views
Ch06 使用 JSP by Justin Lin
Ch06 使用 JSP
Justin Lin
•
250 views
Ch05 Servlet 進階 API、過濾器與傾聽器 by Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
•
204 views
Ch04 會話管理 by Justin Lin
Ch04 會話管理
Justin Lin
•
238 views
Ch03 請求與回應 by Justin Lin
Ch03 請求與回應
Justin Lin
•
236 views
Ch02 撰寫與設定 Servlet by Justin Lin
Ch02 撰寫與設定 Servlet
Justin Lin
•
352 views
CH1. 簡介 Web 應用程式 by Justin Lin
CH1. 簡介 Web 應用程式
Justin Lin
•
1.2K views
14. 進階主題 by Justin Lin
14. 進階主題
Justin Lin
•
406 views
13.並行、平行與非同步 by Justin Lin
13.並行、平行與非同步
Justin Lin
•
237 views
12. 除錯、測試與效能 by Justin Lin
12. 除錯、測試與效能
Justin Lin
•
153 views
11. 常用內建模組 by Justin Lin
11. 常用內建模組
Justin Lin
•
149 views
10. 資料永續與交換 by Justin Lin
10. 資料永續與交換
Justin Lin
•
156 views
9. 資料結構 by Justin Lin
9. 資料結構
Justin Lin
•
292 views
例外處理
2.
7. 例外處理 • 學習目標 –
使用 try、except 處理 例外 – 認識例外繼承架構 – 認識 raise 使用時機 – 運用 finally 清除資源 – 使用 with as 管理資源
3.
使用 try、except
5.
• 嘗試執行 try
區塊中的程式碼 • 如果發生例外,執行流程會跳離例外發生 點,然後比對 except 宣告的型態 • 如果符合引發的例外物件型態,就執行 except 區塊中的程式碼
6.
• 在 Python
中,例外並不一定是錯誤 • 使用 for in 語法時,其實底層就運用到 了例外處理機制 • 只要是具有 __iter__() 方法的物件,都 可以使用 for in 來迭代 • 沒有下一個元素時, 會引發 StopIteration 例外
7.
• 可以使用 iter()
方法呼叫物件上的 __iter__() 取得迭代器 • 可以使用 next() 來呼叫迭代器的 __next__()方法
8.
• for in
會在遇到 StopIteration 時, 靜靜地結束迭代
9.
• except 之後可以使用
tuple 指定多個物件, 也可以有多個except • 如果沒有指定 except 後的物件型態,表示 捕捉所有引發的物件
10.
• 當程式中發生例外時,流程會從例外發生 處中斷,並進行 except
的比對, • 如果有相符的例外型態,就會執行對應的 except 區塊 • 執行完畢後若仍有後續的流程,就會繼續 執行
12.
例外繼承架構 • 如果一個例外在 except
的比對過程中, 就符合了某個例外的父型態,後續即使有 定義了 except 比對子型態例外,也等同 於沒有定義
13.
• 例外都是 BaseException
的子類別 • 當使用 except 而沒有指定例外型態時, 實際上就是比對 BaseException
17.
• Python 中的例外並非都是錯誤 –
StopIteration – KeyboardInterrupt – SystemExit – GeneratorExit
18.
• 如果想要自訂例外,不要直接繼承 BaseException • 應該繼承
Exception,或者是 Exception 的相關子類別來繼承
19.
引發(raise)例外
20.
• 想讓呼叫方知道因為某些原因,而使得流 程無法繼續而必須中斷時,可以引發例外 • 可以使用
raise,之後指定要引發的例外 物件或型態 • 只指定例外型態的時候,會自動建立例外 物件
23.
• 可以為自己的 API
建立一個根例外,商務 相關的例外都可以衍生自這個根例外 • 這可以方便 API 使用者必要時,在 except 時使用你的根例外來處理 API 相關的例外
24.
• 例外並沒有真的被解決,只是留下了一些 日誌訊息,問題還是要向上呈現
25.
• 若重新引發例外時,想要使用自訂的例外 或其他例外類型,並且將 except
比對到 的例外作為來源,可以使用 raise from
27.
• 可以透過例外實例的 __cause__來取得 raise
from 時的來源例外 • 如果一個例外在 except 中被引發,就算 沒有使用 raise from,原本比對到的例 外,也會自動被設定給被引發例外的 __context__
29.
Python 例外風格 • 在Python
中,例外並不一定是錯誤 • SystemExit、GeneratorExit、 KeyboardInterrupt、 StopIteration • 更像是一種事件,代表著流程因為某個原 因無法繼續而必須中斷
30.
• 主動引發例外,是對呼叫者善盡告知責任 • 在
Python 中,就算例外是個錯誤,只要程 式碼能明確表達出意圖的情況下,也常會 當成是流程的一部份
31.
認識堆疊追蹤 • 想得知例外發生的根源,以及多重呼叫下 例外的傳播過程,可利用 traceback
模組
33.
• print_exc() 是 print_exception(*sys.exc_info(), limit,
file, chain) 的便捷方法
34.
• traceback 物件代表了呼叫堆疊中每一個 層次的追蹤
36.
• 對一個未被比對到的例外,python 直譯 器最後會呼叫
sys.excepthook() 並傳 入三個引數 – 例外類別、實例與 traceback 物件 • 如果想要自訂 sys.excepthook() 被呼 叫時的行為,也可以自行指定一個可接受 三個引數的函式給 sys.excepthook
38.
• Exception 有個子類別
Warning
39.
• 警告訊息通常作為一種提示,用來告知程 式有一些潛在性的問題 • 例如使用了被棄用(Deprecated)的功能、 以不適當的方式存取資源等 •
Warning 雖然是一種例外,不過基本上不 會直接透過 raise 引發 • 透過 warnings 模組的 warn() 函式來提 出警告
40.
• 預設的情況下,執行 warnings.warn() 函式不會產生任何結果 •
執行 python 直譯器時,透過 -W 引數指定 警告控制
41.
• -W 接受的格式是 action:message:category:module:lineno
43.
• 如果不想在執行 python
直譯器時加上- W 指定, 也可以設定 PYTHONWARNINGS 環境變數 • 若已經設定PYTHONWARNINGS 環境變數, 執行時又自行加上-W 指定,則使用-W 的 指定
45.
• 也可以在程式中設定警告訊息控制, 例如 簡單地使用
warnings.simplefilter() 方法:
46.
try、except、else • else 與
try、except 搭配,讓 try 中的 程式碼,盡量與可能引發例外的來源相關
47.
• Python 官方文件〈Errors
and Exceptions〉 也有個範例:
48.
• 這會比撰寫以下的程式來得好:
49.
try、finally
50.
• 若檔案開啟失敗,就不會建立 f
變數,最 後執行 finally 的 f.close() 時, 就會引發NameError
51.
• 如果程式撰寫的流程中先 return
了,而 且也有寫 finally 區塊 • finally 區塊會先執行完後,再將值傳回
52.
使用 with as •
自定義一個 with_file() 函式:
54.
• Python 提供
with as 語法解決這類需求
55.
• with 之後銜接的資源實例,可以透過
as 來指定給一個變數,之後就可以在區塊中 進行資源的處理 • 當離開 with as 區塊之後,就會自動做清 除資源的動作
56.
• 只要物件支援情境管理協定,就可以使用 with as
語句 • 支援情境管理協定的物件,必須實作 __enter__() 與 __exit__() 兩個方法
58.
• 可以使用 contextlib
模組的 @contextmanager 來實作
59.
• with as
語法是用來表示,其區塊是處於 某個特殊的情境之中 • 處於自動關閉檔案的情境是其中一種情況 • 使用 @contextmanager 實作函式時, yield 的前後建立了with 區塊的情境
60.
• contextlib 模組就提供有
suppress() 函式:
61.
• 如果某個物件有實作了 close()
方法,但 沒有實作情境管理器協定:
62.
• contextlib 模組就提供有
closing() 函式: