狠狠撸
Submit Search
7. 例外处理
Jan 27, 2021
1 like
128 views
Justin Lin
使用 try、except 處理例外 認識例外繼承架構 認識 raise 使用時機 運用 finally 清除資源 使用 with as 管理資源
Read less
Read more
1 of 64
Download now
Downloaded 14 times
Recommended
4. 流程语法与函式
4. 流程语法与函式
Justin Lin
?
認識基本流程語法 使用 for Comprehension 認識函式與變數範圍 運用一級函式特性 使用 yield 建立產生器 初探型態提示
例外处理
例外处理
Justin Lin
?
使用 try、except 處理例外 認識例外繼承架構 認識 raise 使用時機 運用 finally 清除資源 使用 with as 管理資源
流程语法与函式
流程语法与函式
Justin Lin
?
認識基本流程語法 使用 for Comprehension 認識函式與變數範圍 運用一級函式特性 使用 yield 建立產生器 初探型態提示
流程语法与函式
流程语法与函式
Justin Lin
?
《Python 3.5 技術手冊》第 4 章投影片
例外处理
例外处理
Justin Lin
?
《Python 3.5 技術手冊》第 7 章投影片
7. 錯誤處理
7. 錯誤處理
Justin Lin
?
認識throw使用時機 使用try-catch處理錯誤 處理Promise錯誤 結合await、await與try-catch
Java SE 8 技術手冊第 8 章 - 例外处理
Java SE 8 技術手冊第 8 章 - 例外处理
Justin Lin
?
使用try、catch處理例外 認識例外繼承架構 認識throw、throws的使用時機 運用finally關閉資源 使用自動關閉資源語法 認識AutoCloseable介面
型态与运算子
型态与运算子
Justin Lin
?
《Python 3.5 技術手冊》第 3 章投影片
并行与平行
并行与平行
Justin Lin
?
《Python 3.5 技術手冊》第 13 章投影片
型态与运算子
型态与运算子
Justin Lin
?
認識內建型態 學習字串格式化 瞭解變數與運算子 運用切片運算
CH08:例外处理
CH08:例外处理
Justin Lin
?
使用try、catch處理例外 認識例外繼承架構 認識throw、throws使用時機 運用finally關閉資源 使用自動關閉資源語法 認識AutoCloseable介面
从模组到类别
从模组到类别
Justin Lin
?
《Python 3.5 技術手冊》第 5 章投影片
5. 建構式、原型與類別
5. 建構式、原型與類別
Justin Lin
?
認識建構式之作用 理解原型鏈機制 區別原型與類別典範 善用類別語法
從 REPL 到 IDE
從 REPL 到 IDE
Justin Lin
?
《Python 3.5 技術手冊》投影片第 2 章
从模组到类别
从模组到类别
Justin Lin
?
深入模組管理 初識物件導向 學習定義類別 定義運算子
Java SE 7 技術手冊投影片第 08 章 - 例外处理
Java SE 7 技術手冊投影片第 08 章 - 例外处理
Justin Lin
?
Java SE 7 技術手冊
颁贬11:执行绪与并行础笔滨
颁贬11:执行绪与并行础笔滨
Justin Lin
?
認識Thread與Runnable 使用synchronized 使用wait()、notify()、notifyAll() 運用高階並行API
资料永续与交换
资料永续与交换
Justin Lin
?
使用 pickle 與 shelve 認識 DB-API 2.0 使用 sqlite3 模組 處理 CSV、JSON、XML
4. 使用物件
4. 使用物件
Justin Lin
?
掌握this參考 運用物件實字 認識物件協定 使用符號協定
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
?
瞭解封裝觀念與實現 定義類別、建構式與方法 使用方法重載與不定長度引數 瞭解static成員
12, string
12, string
ted-xu
?
Java tutorials - String
进阶主题
进阶主题
Justin Lin
?
《Python 3.5 技術手冊》第 14 章投影片
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
?
區分基本型態與類別型態 瞭解物件與參考的關係 從包裹器認識物件 以物件觀點看待陣列 認識字串的特性
open() 與 io 模組
open() 與 io 模組
Justin Lin
?
《Python 3.5 技術手冊》第 8 章投影片
8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
?
使用 open()函式 使用 stdin、stdout、stderr 認識檔案描述器 認識 io 模組
open() 與 io 模組
open() 與 io 模組
Justin Lin
?
使用 open()函式 使用 stdin、stdout、stderr 認識檔案描述器 認識 io 模組
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
?
認識Thread與Runnable 使用synchronized 使用wait()、notify()、notifyAll() 運用高階並行API
5, initialization & cleanup
5, initialization & cleanup
ted-xu
?
About java object initialization and cleanup
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
?
認識 Spring Boot 認識 Spring Tool Suite 遷移微網誌至 Spring Boot
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
?
區別程式庫與框架 逐步善用 Spring MVC 簡介 Thymeleaf 模版 使用 Spring Security
More Related Content
What's hot
(20)
并行与平行
并行与平行
Justin Lin
?
《Python 3.5 技術手冊》第 13 章投影片
型态与运算子
型态与运算子
Justin Lin
?
認識內建型態 學習字串格式化 瞭解變數與運算子 運用切片運算
CH08:例外处理
CH08:例外处理
Justin Lin
?
使用try、catch處理例外 認識例外繼承架構 認識throw、throws使用時機 運用finally關閉資源 使用自動關閉資源語法 認識AutoCloseable介面
从模组到类别
从模组到类别
Justin Lin
?
《Python 3.5 技術手冊》第 5 章投影片
5. 建構式、原型與類別
5. 建構式、原型與類別
Justin Lin
?
認識建構式之作用 理解原型鏈機制 區別原型與類別典範 善用類別語法
從 REPL 到 IDE
從 REPL 到 IDE
Justin Lin
?
《Python 3.5 技術手冊》投影片第 2 章
从模组到类别
从模组到类别
Justin Lin
?
深入模組管理 初識物件導向 學習定義類別 定義運算子
Java SE 7 技術手冊投影片第 08 章 - 例外处理
Java SE 7 技術手冊投影片第 08 章 - 例外处理
Justin Lin
?
Java SE 7 技術手冊
颁贬11:执行绪与并行础笔滨
颁贬11:执行绪与并行础笔滨
Justin Lin
?
認識Thread與Runnable 使用synchronized 使用wait()、notify()、notifyAll() 運用高階並行API
资料永续与交换
资料永续与交换
Justin Lin
?
使用 pickle 與 shelve 認識 DB-API 2.0 使用 sqlite3 模組 處理 CSV、JSON、XML
4. 使用物件
4. 使用物件
Justin Lin
?
掌握this參考 運用物件實字 認識物件協定 使用符號協定
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
?
瞭解封裝觀念與實現 定義類別、建構式與方法 使用方法重載與不定長度引數 瞭解static成員
12, string
12, string
ted-xu
?
Java tutorials - String
进阶主题
进阶主题
Justin Lin
?
《Python 3.5 技術手冊》第 14 章投影片
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
?
區分基本型態與類別型態 瞭解物件與參考的關係 從包裹器認識物件 以物件觀點看待陣列 認識字串的特性
open() 與 io 模組
open() 與 io 模組
Justin Lin
?
《Python 3.5 技術手冊》第 8 章投影片
8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
?
使用 open()函式 使用 stdin、stdout、stderr 認識檔案描述器 認識 io 模組
open() 與 io 模組
open() 與 io 模組
Justin Lin
?
使用 open()函式 使用 stdin、stdout、stderr 認識檔案描述器 認識 io 模組
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
?
認識Thread與Runnable 使用synchronized 使用wait()、notify()、notifyAll() 運用高階並行API
5, initialization & cleanup
5, initialization & cleanup
ted-xu
?
About java object initialization and cleanup
并行与平行
并行与平行
Justin Lin
?
型态与运算子
型态与运算子
Justin Lin
?
CH08:例外处理
CH08:例外处理
Justin Lin
?
从模组到类别
从模组到类别
Justin Lin
?
5. 建構式、原型與類別
5. 建構式、原型與類別
Justin Lin
?
從 REPL 到 IDE
從 REPL 到 IDE
Justin Lin
?
从模组到类别
从模组到类别
Justin Lin
?
Java SE 7 技術手冊投影片第 08 章 - 例外处理
Java SE 7 技術手冊投影片第 08 章 - 例外处理
Justin Lin
?
颁贬11:执行绪与并行础笔滨
颁贬11:执行绪与并行础笔滨
Justin Lin
?
资料永续与交换
资料永续与交换
Justin Lin
?
4. 使用物件
4. 使用物件
Justin Lin
?
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
?
12, string
12, string
ted-xu
?
进阶主题
进阶主题
Justin Lin
?
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
?
open() 與 io 模組
open() 與 io 模組
Justin Lin
?
8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
?
open() 與 io 模組
open() 與 io 模組
Justin Lin
?
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
?
5, initialization & cleanup
5, initialization & cleanup
ted-xu
?
More from Justin Lin
(20)
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
?
認識 Spring Boot 認識 Spring Tool Suite 遷移微網誌至 Spring Boot
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
?
區別程式庫與框架 逐步善用 Spring MVC 簡介 Thymeleaf 模版 使用 Spring Security
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
?
使用 Gradle 結合 Gradle 與 IDE 認識相依注入 使用 Spring 核心
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
?
寄送純文字郵件 寄送 HTML 郵件 寄送附檔郵件
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
?
了解 Java EE 安全概念與名詞 使用容器基本驗證與表單驗 使用 HTTPS 保密資料傳輸
Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
?
了解 JDBC 架構 使用基本的 JDBC 透過 JNDI 取得DataSource 在 Web 應用程式整合資料庫
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
?
使用 Tag File 自訂標籤 使用 Simple Tag 自訂標籤 使用 Tag 自訂標籤
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
?
了解何謂 JSTL 使用 JSTL 核心標籤庫 使用 JSTL 格式標籤庫 使用 JSTL XML 標籤庫 使用 JSTL 函式標籤庫
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
?
了解 JSP 生命週期 使用 JSP 語法元素 使用 JSP 標準標籤 使用運算式語言(EL) 自訂 EL 函式
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
了解 Servlet 生命週期 使用 ServletConfig 與ServletContext 使用 PushBuilder 各種傾聽器的使用 繼承 HttpFilter 實作過濾器
Ch04 會話管理
Ch04 會話管理
Justin Lin
?
了解會話管理基本原理 使用 Cookie 類別 使用 HttpSession 會話管理 了解容器會話管理原理
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
?
取得請求參數與標頭 處理中文字元請求與回應 設定與取得請求範圍屬性 使用轉發、包含、重新導向
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
?
開發環境準備與使用 了解 Web 應用程式架構 Servlet 撰寫與部署設定 了解 URI 模式對應 使用 web-fragement.xml
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
?
認識 HTTP 基本特性 了解何為 URI 編碼 認識 Web 容器角色 了解 Servlet 與 JSP 的關係 認識 MVC/Model 2
14. 进阶主题
14. 进阶主题
Justin Lin
?
運用描述器 實作裝飾器 定義 meta 類別 使用相對匯入 泛型進階
13.并行、平行与非同步
13.并行、平行与非同步
Justin Lin
?
認識並行、平行與非同步 使用 threading 模組 使用 multiprocessing 模組 使用 concurrent.futures模組 運用 async、await 與 asyncio
12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
?
使用 pdb 模組除錯 對程式進行單元測試 使用 timeit 評測程式片段 使用 cProfile(profile)察看評測數據
11. 常用內建模組
11. 常用內建模組
Justin Lin
?
處理日期與時間 認識日誌的使用 運用規則表示式 管理檔案與目錄 URL 處理
10. 资料永续与交换
10. 资料永续与交换
Justin Lin
?
使用 pickle 與 shelve 認識 DB-API 2.0 使用 sqlite3 模組 處理 CSV、JSON、XML
9. 資料結構
9. 資料結構
Justin Lin
?
認識 hashable、iterable、orderable 對物件進行排序 認識群集架構 運用 collections 模組 運用 collections.abc 模組
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
?
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
?
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
?
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
?
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
?
Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
?
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
?
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
?
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
?
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
Ch04 會話管理
Ch04 會話管理
Justin Lin
?
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
?
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
?
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
?
14. 进阶主题
14. 进阶主题
Justin Lin
?
13.并行、平行与非同步
13.并行、平行与非同步
Justin Lin
?
12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
?
11. 常用內建模組
11. 常用內建模組
Justin Lin
?
10. 资料永续与交换
10. 资料永续与交换
Justin Lin
?
9. 資料結構
9. 資料結構
Justin Lin
?
7. 例外处理
2.
7. 例外处理 ? 學習目標 –
使用 try、except 處理 例外 – 認識例外繼承架構 – 認識 raise 使用時機 – 運用 finally 清除資源 – 使用 with as 管理資源 2
3.
使用 try、except 3
4.
4
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
10.
? 當程式中發生例外時,流程會從例外發生 處中斷,並進行 except
的比對, ? 如果有相符的例外型態,就會執行對應的 except 區塊 ? 執行完畢後若仍有後續的流程,就會繼續 執行 10
11.
11
12.
例外繼承架構 ? 如果一個例外在 except
的比對過程中, 就符合了某個例外的父型態,後續即使有 定義了 except 比對子型態例外,也等同 於沒有定義 12
13.
? 例外都是 BaseException
的子類別 ? 當使用 except 而沒有指定例外型態時, 實際上就是比對 BaseException 13
14.
14
15.
15
16.
16
17.
? Python 中的例外並非都是錯誤 –
StopIteration – KeyboardInterrupt – SystemExit – GeneratorExit 17
18.
? 如果想要自訂例外,不要直接繼承 BaseException ? 應該繼承
Exception,或者是 Exception 的相關子類別來繼承 18
19.
引發(raise)例外 19
20.
? 想讓呼叫方知道因為某些原因,而使得流 程無法繼續而必須中斷時,可以引發例外 ? 可以使用
raise,之後指定要引發的例外 物件或型態 ? 只指定例外型態的時候,會自動建立例外 物件 20
21.
21
22.
22
23.
? 可以為自己的 API
建立一個根例外,商務 相關的例外都可以衍生自這個根例外 ? 這可以方便 API 使用者必要時,在 except 時使用你的根例外來處理 API 相關的例外 23
24.
? 例外並沒有真的被解決,只是留下了一些 日誌訊息,問題還是要向上呈現 24
25.
? 若重新引發例外時,想要使用自訂的例外 或其他例外類型,並且將 except
比對到 的例外作為來源,可以使用 raise from 25
26.
26
27.
? 可以透過例外實例的 __cause__來取得 raise
from 時的來源例外 ? 如果一個例外在 except 中被引發,就算 沒有使用 raise from,原本比對到的例 外,也會自動被設定給被引發例外的 __context__ 27
28.
28
29.
Python 例外風格 ? 在Python
中,例外並不一定是錯誤 ? SystemExit、GeneratorExit、 KeyboardInterrupt、 StopIteration ? 更像是一種事件,代表著流程因為某個原 因無法繼續而必須中斷 29
30.
? 主動引發例外,是對呼叫者善盡告知責任 ? 在
Python 中,就算例外是個錯誤,只要程 式碼能明確表達出意圖的情況下,也常會 當成是流程的一部份 30
31.
認識堆疊追蹤 ? 想得知例外發生的根源,以及多重呼叫下 例外的傳播過程,可利用 traceback
模組 31
32.
32
33.
? print_exc() 是 print_exception(*sys.exc_info(), limit,
file, chain) 的便捷方法 33
34.
? traceback 物件代表了呼叫堆疊中每一個 層次的追蹤 34
35.
35
36.
? 對一個未被比對到的例外,python 直譯 器最後會呼叫
sys.excepthook() 並傳 入三個引數 – 例外類別、實例與 traceback 物件 ? 如果想要自訂 sys.excepthook() 被呼 叫時的行為,也可以自行指定一個可接受 三個引數的函式給 sys.excepthook 36
37.
37
38.
? Exception 有個子類別
Warning 38
39.
? 警告訊息通常作為一種提示,用來告知程 式有一些潛在性的問題 ? 例如使用了被棄用(Deprecated)的功能、 以不適當的方式存取資源等 ?
Warning 雖然是一種例外,不過基本上不 會直接透過 raise 引發 ? 透過 warnings 模組的 warn() 函式來提 出警告 39
40.
? 預設的情況下,執行 warnings.warn() 函式不會產生任何結果 ?
執行 python 直譯器時,透過 -W 引數指定 警告控制 40
41.
? -W 接受的格式是 action:message:category:module:lineno 41
42.
42
43.
? 如果不想在執行 python
直譯器時加上- W 指定, 也可以設定 PYTHONWARNINGS 環境變數 ? 若已經設定PYTHONWARNINGS 環境變數, 執行時又自行加上-W 指定,則使用-W 的 指定 43
44.
44
45.
? 也可以在程式中設定警告訊息控制, 例如 簡單地使用
warnings.simplefilter() 方法: 45
46.
try、except、else ? else 與
try、except 搭配,讓 try 中的 程式碼,盡量與可能引發例外的來源相關 46
47.
? Python 官方文件〈Errors
and Exceptions〉 也有個範例: 47
48.
? 這會比撰寫以下的程式來得好: 48
49.
try、finally 49
50.
? 若檔案開啟失敗,就不會建立 f
變數,最 後執行 finally 的 f.close() 時, 就會引發NameError 50
51.
? 如果程式撰寫的流程中先 return
了,而 且也有寫 finally 區塊 ? finally 區塊會先執行完後,再將值傳回 51
52.
使用 with as ?
自定義一個 with_file() 函式: 52
53.
53
54.
? Python 提供
with as 語法解決這類需求 54
55.
? with 之後銜接的資源實例,可以透過
as 來指定給一個變數,之後就可以在區塊中 進行資源的處理 ? 當離開 with as 區塊之後,就會自動做清 除資源的動作 55
56.
? 只要物件支援情境管理協定,就可以使用 with as
語句 ? 支援情境管理協定的物件,必須實作 __enter__() 與 __exit__() 兩個方法 56
57.
57
58.
58
59.
? 可以使用 contextlib
模組的 @contextmanager 來實作 59
60.
? with as
語法是用來表示,其區塊是處於 某個特殊的情境之中 ? 處於自動關閉檔案的情境是其中一種情況 ? 使用 @contextmanager 實作函式時, yield 的前後建立了with 區塊的情境 60
61.
61
62.
? contextlib 模組就提供有
suppress() 函式: 62
63.
? 如果某個物件有實作了 close()
方法,但 沒有實作情境管理器協定: 63
64.
? contextlib 模組就提供有
closing() 函式: 64