第十章,異常和錯誤

try 語句有兩種主要形式: try-except 和 try-finally . 這兩個語句是互斥的,也就是說你
只能使用其中的一種. 一個 try 語句能夠對應一個或多個 except 子句, 但只能對應一個
finally 子句, 或是一個 try-except-finally 複合語句.
你可使用 try-except 語句檢測和處理異常. 你也能夠添加一個可選的 else 子句處理沒
有探測到異常的時執行的代碼. 而 try-finally 只容許檢測異常並作一些必要的清除工做(不管
發生錯誤與否), 沒有任何異常處理設施. 正如你想像的,複合語句二者均可以作到.

異常被遷移到了 new-style class 上,
啓用了一個新的"全部異常的母親", 這個類叫作 BaseException , 異常的繼承結構有了少量調整,
爲了讓人們擺脫不得不除建立兩個處理器的慣用法. KeyboardInterrupt 和 SystemExit被從
Exception 裏移出, 和 Exception 平級:

BaseException
|- KeyboardInterrupt--用戶按下了ctlr-c,想要關閉程序
|- SystemExit--當前應用程序須要退出
|- Exception
|- (all other current built-in exceptions) 全部當前內建異常

try-else 語句。
:在try 範圍中沒有異常被檢測到時,執行else 子句.

try-finally 語句
.這個try-finally語句和try-except區別在於它不是用來捕捉異常的.做爲替代,它經常用來維持一致的行爲而不管異常是否發生.咱們得知不管try中是否有異常觸發,finally 代碼段都會被執行


咱們綜合了這一章目前咱們所見過的全部不一樣的能夠處理異常的語法樣式:
try:
try_suite
except Exception1:
suite_for_Exception1
except (Exception2, Exception3, Exception4):
suite_for_Exceptions_2_3_and_4
except Exception5, Argument5:
suite_for_Exception5_plus_argument
except (Exception6, Exception7), Argument67:
suite_for_Exceptions6_and_7_plus_argument
except:
suite_for_all_other_exceptions
else:
no_exceptions_detected_suite
finally:
always_execute_suite

上下文管理 with語句.這顯然意味着只有內建了"上下文管理"的對象能夠和with 一塊兒工做.
一下這些對象支持with語句、


file
?? decimal.Context
?? thread.LockType
?? threading.Lock
?? threading.RLock
?? threading.Condition
?? threading.Semaphore
?? threading.BoundedSemaphore

file以前已經接觸過了。


raise語句,Python 提供了一種機制讓程序員明確的觸發異常:這就是raise 語句


目前,有3 個直接從BaseException 派生的異常子
類:SystemExit,KeyboardInterrupt和Exception.其餘的全部的內建異常都是Exception 的子類.表10.2中的每一層縮進都表明一次異常類的派生.

例:10.2 建立異常(myexc.py)
????這個實例暫時沒看,等看到網絡後再回頭研究。

另外一種獲取異常信息的途徑是經過sys 模塊中exc_info()函數. 此功能提供了一個3 元組
(3-tuple)的信息, 多於咱們單純用異常參數所能得到. 讓咱們看看如何用sys.exc_info() :
相關文章
相關標籤/搜索