Python 簡易手冊
單元 27 - raise 陳述
關鍵字 (keyword) raise 用來直接發起例外 (exception) ,主要作用除錯 (debug) ,例如特定情況需要額外處理,就放到例外處理中解決,以下為簡單例子
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 對可能會出錯的程式碼例外處理 try: # 直接發起例外 raise Exception("A++") except Exception as e: # 印出例外名稱 print(e) # 檔名: raise_demo.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
這裡在第 4 行發起例外,然後例外處理直接印出例外名稱,執行結果如下
> python raise_demo.py |
A++ |
> |
單元 26 - try 陳述詳細介紹例外處理的寫法。
但有時候也是除錯需要,例如上例發起 A++ 例外,卻希望直譯器 (interpreter) 顯示另一個名稱,像是 B++ ,這時候 except 的部分可以再用 raise 發起 B++ 例外,但是最後要加上 from None ,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 對可能會出錯的程式碼例外處理 try: # 直接發起例外 raise Exception("A++") except Exception: # 將原本的例外名稱改名 raise Exception("B++") from None # 檔名: raise_demo2.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
第 7 行發起 B++ 例外並且加上 from None ,執行結果如下
> python raise_demo2.py |
Traceback (most recent call last): File "raise_demo2.py", line 7, in >module< raise Exception("B++") from None Exception: B++ |
> |
如果不加上 from None ,直譯器發起例外會多顯示 A++ 例外,然後才顯示 B++ 例外,所以 from None 是簡化直譯器中斷執行後顯示例外的行數。
except 底下可以再放 try-except 做例外處理,缺點是會大幅增加程式碼行數。
參考資料
- https://docs.python.org/3/reference/simple_stmts.html#the-raise-statement
- https://docs.python.org/3/tutorial/errors.html#raising-exceptions