1、try - except 作用: 捕獲程序在執(zhí)行時遇到的異常情況,即一些報錯。什么啥玩意兒沒定義啊,符號又錯了啊之類的你懂得。 意義: 因為程序在發(fā)現(xiàn)某個錯誤時,往往會中斷不再向下執(zhí)行,如下例子說明問題: 很明顯,我們并沒有定義b, 就將它賦值給a, 現(xiàn)在我們運行如下: 不出所料提示NameError, 發(fā)現(xiàn)錯誤就報錯,不再執(zhí)行下面的程序。 現(xiàn)在我們用try/except寫一下: 打?。?/p> 我們從這個例子可以試著去推測這段代碼的執(zhí)行過程: (1)先執(zhí)行try代碼塊, 發(fā)現(xiàn)了錯誤。 (2)執(zhí)行except代碼塊。 (3)程序向下執(zhí)行。 可能有疑問try block發(fā)現(xiàn)異常前后正常的的部分會被執(zhí)行嗎,可以測試一下: 打?。?/p> 結(jié)論:
(1)先執(zhí)行try block, 直到發(fā)現(xiàn)了錯誤,不再執(zhí)行異常之后的代碼。 (2)執(zhí)行except block. (3)向下繼續(xù)。
現(xiàn)在已經(jīng)對try/excepy有了感性的了解,接下來拓展它的用法: 簡單來說,在try/except語句中,可以用多個except. 例子: 這里使用了兩個except, 可以發(fā)現(xiàn)except 后面跟了SyntaxError, NameError, 這個我們經(jīng)常見過的兩個系統(tǒng)報錯,當然這里可以改成任何系統(tǒng)錯誤(參見python標準異常)。執(zhí)行: 可見,當try代碼塊執(zhí)行出現(xiàn)異常,在except中匹配到了NameError的異常,則執(zhí)行了對應except的語句。 新的疑問,若所有except都沒有匹配呢,測試如下: 我們將NameErro改成了SystemExit,打?。?/p> 發(fā)現(xiàn)又回到了開始,說明這樣的try/except等于是廢的。。。 所以避免沒有匹配到異常,又中斷程序,將代碼修改如下: 即又加了一條except, 這條except后面沒有加系統(tǒng)錯誤,打?。?/p> OK,get it.
2、try-except-else 舉個例子: 打?。?/p> 可見,有異常時,else block時不執(zhí)行的。 那,無異常時: 打?。?/p> 可見,無異常時else block執(zhí)行。 至此可以寫出try/except/else的格式 -------------------------------------------------------------------------------- try: try block except ERROR1: except ERROR1 block except ERRPR2: except ERROR2 block ...... except: except block else: else block ----------------------------------------------------------------------------- 當然, 這些測試只是看到語句的功能,具體的實現(xiàn)內(nèi)部原理再說吧, 一開始看那些得把人搞暈。
3、try-finally 作用: 無論try語句是否有異常,最后都要執(zhí)行的代碼。 例子: 錯是有的,先執(zhí)行完finally block, 然后回到try block報錯。 當然 try, except, else, finally是可以全部組合在一起用的。
PS:實際上可以自定義異常,這個需要用到類的知識,以后再說。 |
|
來自: yydy1983 > 《Python語法基礎》