Python學習筆記 七 異常處理

2021-09-10 09:26:44 字數 3718 閱讀 4868

這篇文章將會介紹 python 中異常及其處理方法

異常是一種非正常狀態,它表示程式在執行過程中發生錯誤

在實際情況中,可能會有多種原因導致程式出現異常狀態,而每種異常狀態都會由乙個異常物件表示

當程式出現異常狀態時,會丟擲乙個異常物件,如果該物件未**獲和處理,程式將會中止

在一般情況下,程式設計師需要考慮各種可能的異常原因,手動捕獲並處理異常,以避免程式突然中止

導致程式出現異常的原因有很多,以下列舉一些系統內建的常見的異常物件

異常物件

描述exception

幾乎所有異常類的基類

syntaxerror

語法錯誤

typeerror

將內建函式用於型別不正確的物件

valueerror

將內建函式用於型別正確但包含值不正確的物件

attributeerror

引用屬性錯誤

nameerror

引用變數錯誤

indexerror

使用序列中不存在的索引

keyerror

使用對映中不存在的鍵值

除系統內建的異常物件外,使用者還可以自定義異常物件,自定義的異常物件需要繼承乙個異常類

class

myexception

(exception)

:def

__init__

(self, info)

:super()

.__init__(self)

self.info = info

def__str__

(self)

:return self.info

try:

raise myexception(

'my exception'

)except myexception as e:

print

(e)# my exception

當語句執行發生錯誤時,該語句會丟擲乙個異常

num =1/

0

除了被動丟擲的異常外,我們還能使用raise語句主動丟擲乙個異常

raise exception(

'error'

)

我們可以用try-except捕獲和處理異常,若在try**現異常,則馬上執行except中的**

try

:print

('begin'

) string =

'hello'

number =

int(string)

print

('end'

)except

:print

('exception'

)# begin

# exception

我們也能在try-except後加上else,在沒有捕獲到異常時,else中的**才會被執行

try

: string =

'hello'

except

:print

('exception'

)else

:print

('else'

)# else

我們還能在try-except後加上finally,無論是否捕獲到異常,finally中的**都會被執行

try

: string =

'hello'

number =

int(string)

except

:print

('exception'

)finally

:print

('finally'

)# exception

# finally

此外可以在except語句後指定異常型別,那麼該except語句就只能捕獲這種型別的異常

乙個沒有指定異常型別的except語句能捕獲所有異常,但這樣不能得到任何有效資訊

try

: li =

list()

li.add(

123)

except attributeerror as e:

print

('attributeerror:'

, e)

# attributeerror: 'list' object has no attribute 'add'

另外可以同時使用多個except語句處理不同的異常,但是要注意它們之間的順序

因為當前面的except語句捕獲到異常後,將不再執行後面的except語句

try

: li =

list()

li[0]

=123

except indexerror as e:

print

('indexerror:'

, e)

except exception as e:

print

('exception:'

, e)

# indexerror: list assignment index out of range

當乙個異常被丟擲時,異常所在的作用域需要捕獲並處理該異常

若異常在當前作用域沒有得到處理,那麼它將一直向上層作用域傳遞,直至它能夠被處理

若異常一直向上傳遞到主程式都沒有得到處理,那麼程式將自動終止並顯示錯誤資訊

def

faulty()

:raise exception(

'error'

)def

handle_exception()

:try

: faulty(

)except

:print

('exception handled'

)def

ignore_exception()

: faulty(

)handle_exception(

)# exception handled

ignore_exception(

)# 異常逐層傳遞直至主程式

# traceback (most recent call last):

# file "index.py", line 14, in

# ignore_exception() # exception: error

# file "index.py", line 11, in ignore_exception

# faulty()

# file "index.py", line 2, in faulty

# raise exception('error')

# exception: error

Python學習筆記(七) 異常處理

異常處理部分,只是很粗略的看了一遍。著重記錄try except塊,和if else類似,不過try是異常控制的,一旦發生異常,跳過其他未執行的語句,直接執行except塊中的內容。知道捕獲多種異常的方法,分別處理不同異常的方法,捕獲所有異常的方法。finally語句 無論程式是否發生異常,fina...

python學習筆記異常處理(七)

異常處理是工作中編寫 必須要完成的內容,對於不符合預期的操作,程式總會出現異常情況,而對異常情況能夠妥善處理,是保證程式穩定性的關鍵。f input filename filename hone a.py ff open f traceback most recent call last file ...

python學習筆記 七 異常

3.自定義異常 4.警告 在實際開發中,往往不會出現乙個系統編寫下來,沒有出現任何乙個bug。為處理這種會出現錯誤的地方,如除數為零的除法,python提供了非常強大的機制 異常處理機制。python使用異常物件來表示程式異常狀態,並在遇到錯誤時引發異常。異常物件未被處理 或捕獲 是,程式將終止執行...