try
:《語句塊》
#可能產生異常的語句塊
except
《異常名1
>
:#要處理的異常
《語句塊》
#異常處理語句
except
《異常名2
>
:#要處理的異常
《語句塊》
#異常處理語句..
....
else
:《語句塊》
#未觸發異常,則執行該語句塊
finally
:《語句塊》
#始終執行該語句塊,一般為了達到釋放資源的目的
異常名
描述attributeerror
呼叫不存在的方法引發的異常
eoferror
遇到檔案末尾引發的異常
importerror
匯入模組出錯引發的異常
indexerror
列表越界引發的異常
ioerror
i/o操作引發的異常,如開啟檔案出錯
keyerror
使用字典中不存在的關鍵字引發的異常
nameerror
使用不存在的變數名引發的異常
taberror
語句塊縮排不正確引發的異常
valueerror
搜尋列表中不存在的值引發的異常
zerodivisionerror
除數為0引發的異常
except語句的幾個主要用法:
except: #捕捉所有異常
except《異常名》: #捕捉指定異常
except(異常名1,異常名2):#捕捉異常名1或者異常名2
except《異常名》 as 《資料》: #捕捉指定異常及其附件的資料
except(異常名1,異常名2)as 《資料》: #捕捉異常名1或者異常名2及異常的附件資料
使用方式:
raise 異常名
raise 異常名,附加資料
raise 類名
例1
程式中使用了**丟擲異常,因為沒有捕獲該異常,所以程式會中斷,導致後邊的**不能執行。
def
testraise()
:for i in
range(5
):if i==2:
raise nameerror
print
(i)print
('end...'
)testraise(
)'''
以下為執行結果:01
traceback (most recent call last):
file "c:\users\zh\desktop\55.py", line 19, in testraise()
file "c:\users\zh\desktop\55.py", line 16, in testraise
raise nameerror
nameerror
'''
testraise函式中是乙個for迴圈。當迴圈變數 i=2 時,丟擲nameerror異常,因為沒有處理該異常而導致程式執行中斷,後面的所有輸出都得不到執行。
例2
程式中使用了**丟擲異常,同時捕獲的該異常,因此程式執行不中斷
def
testraise()
:for i in
range(5
):try:
if i==2:
raise nameerror
except nameerror:
print
('raise a nameerror!'
)print
(i)print
('end...'
)testraise(
)'''
以下為執行結果:01
raise a nameerror!23
4end...
'''
assert
《條件測試》
,《異常附加資料》
#其中異常附加資料是可選的
assert語句為簡化的raise語句。它引發的前提是其後的條件測試為假。
例3
使用assert丟擲異常,同時捕獲該異常,所以程式不被中斷
def
testraise()
:for i in
range(3
):try:
assert i<
2except assertionerror:
print
('raise a assertionerror!'
)print
(i)print
('end...'
)testraise(
)'''
以下執行結果01
raise a assertionerror!
2end...
'''
assert語句一般用於在程式開發時測試**的有效性。比如某個標量必須在一定的範圍內,超出範圍則引發異常,提醒開發者。所以一般在程式開發中不去捕獲該異常,而是讓它中斷程式。
assert語句只有在python內建的乙個特殊變數_debug_為true時才執行。要關閉程式中的assert語句就使用python -o+檔名來執行程式。如下所示,assert語句被關閉,沒有執行並引發異常。
在cmd中執行
microsoft windows [版本 6.3
.9600
](c)
2013 microsoft corporation。保留所有權利。
c:\users\zh\desktop>python -o 55.py01
2end.
..
通過繼承exception類來建立自己的異常類。異常類的定義和其他類的定義相同
class
rangeerror
(exception)
:def
_init_
(self,value)
: self.value = value
def_str_
(self)
:return self.value
raise rangeerror(
'range error!'
)'''
以下為執行結果
traceback (most recent call last):
file "c:\users\zh\desktop\55.py", line 18, in raise rangeerror('range error!')
rangeerror: range error!
'''
**中自定義的乙個繼承了exception類的異常類,並過載了_init_和_str_兩個方法。之後,直接用raise丟擲這個自定義的異常 讀書筆記 Python常見異常類
1.nameerror 嘗試訪問乙個未宣告的變數,會引發nameerror。例如 print foo 錯誤資訊如下 traceback most recent call last file d pythoncode chapter09 異常.py line 1,in print foo nameer...
讀書筆記 JAVA異常學習
1 異常均為派生於 throwable 類的乙個例項 在下一層分解為 error 和exception,exception 又分為ioexception 和runtimeexception.2 派生與runtimeexception 的通常包括 如果出現 runtimeexception異常,那麼就...
Effective Java 讀書筆記(八) 異常
充分發揮異常的優點,可以提高程式的可讀性 可靠性和可維護性。如果使用不當,它們也會帶來負面影響。異常應該只用於異常的情況下,它們不應該用於正常的控制流。同理,設計良好的 api 不應該強迫客戶端為了正常的控制流而使用異常。如果乙個類有狀態相關的方法,即只有在特定的不可預知的情況下才能呼叫的方法,這個...