try,except,finally的用法


 

 

try,except,finally

try...except形式:指定一個或多個異常處理器(異常子句).。

當在try子句中沒有異常發生時,,異常處理器將不被執行.

當在try子句中有異常發生時,首先會執行except搜索異常處理器,它會按順序搜索直到第一個匹配的處理器找到為止.。

如果在except后面找到對應的異常聲明,就會處理。

如果沒有找到,異常就會被臨時保存起來,然后去執行finally語句,但如果finally中產生了新的異常或者執行了return或者break語句,那么臨時保存的異常將會被丟失,如果finally沒有上面的情況,最后就會拋出保存的異常。

注意:一般我們會將一個沒有指定異常的except語句, 它必須放在最后, 它會匹配任何異常並處理。

 

try...finally形:式指定一個清除處理器. 在執行try語句塊沒有異常發生時, finally子句被執行.在異常引發時, 該異常就被臨時保存起來, finally也被執行, 然后暫存的異常被重新引發.

如果執行finally子句時引發了另一個異常或執行了return或break語句, 就會拋棄保存的異常,在finally子句中的continue語句是非法的(這么做的原因是當前實現的原因 ---- 這個限制可能也會保留下去)在執行finally子句時異常信息是無效的.  

 

簡單總結

1.當執行try...except之間的語句序列沒有發生異常時,則忽略異常處理部分(except)的語句。

2、Except括起來的語句,則只有在產生異常的情況下會被執行,其他情況一概不執行的。 

3、Finally括起來的語句是鐵定會被執行的,無論是否有異常產生;

 

面試題1

def func():
    try:
        return 123
    finally:
        return 321
print(func())#結果:321
 
def func():
    try:
        return 123
    finally:
        print(321)
print(func())#結果321 123

finally有一個特性,那就是無論如何,finally中的代碼都將被執行,那么當執行到try中return的時候函數fun將被結束返回,這個時候由於finally的特性,try中的return 'try return' 經暫時被掛起,當執行完finally中的語句之后再返回執行,可finally中卻執行了另一個return,導致了函數直接結束了,此時try中的finally就被丟失了。所有在我們的實際開發中我們應盡量避免在finally使用return語句返回。

 

面試題2

def fun():
    try:
        print('try--start')
        a = 1/0
    except ValueError as ret:
        print(ret)
    finally:
        return 'finally'
 
print(fun())
#結果
try
--start finally

如果在except中沒有捕獲異常,異常會被保存起來,當finally子句時引發了另一個異常或執行了return或break語句,就會拋棄保存的異常。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM