python中的異常(讀書筆記)

2021-10-05 09:43:21 字數 3584 閱讀 8948

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 不應該強迫客戶端為了正常的控制流而使用異常。如果乙個類有狀態相關的方法,即只有在特定的不可預知的情況下才能呼叫的方法,這個...