這篇文章將會介紹 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使用異常物件來表示程式異常狀態,並在遇到錯誤時引發異常。異常物件未被處理 或捕獲 是,程式將終止執行...