国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

解析Python中的異常處理

2020-02-23 00:56:11
字體:
來源:轉載
供稿:網友

在程序運行的過程中,如果發生了錯誤,可以事先約定返回一個錯誤代碼,這樣,就可以知道是否有錯,以及出錯的原因。在操作系統提供的調用中,返回錯誤碼非常常見。比如打開文件的函數open(),成功時返回文件描述符(就是一個整數),出錯時返回-1。

用錯誤碼來表示是否出錯十分不便,因為函數本身應該返回的正常結果和錯誤碼混在一起,造成調用者必須用大量的代碼來判斷是否出錯:

def foo(): r = some_function() if r==(-1):  return (-1) # do something return rdef bar(): r = foo() if r==(-1):  print 'Error' else:  pass

一旦出錯,還要一級一級上報,直到某個函數可以處理該錯誤(比如,給用戶輸出一個錯誤信息)。

所以高級語言通常都內置了一套try...except...finally...的錯誤處理機制,Python也不例外。
try

讓我們用一個例子來看看try的機制:

try: print 'try...' r = 10 / 0 print 'result:', rexcept ZeroDivisionError, e: print 'except:', efinally: print 'finally...'print 'END'

當我們認為某些代碼可能會出錯時,就可以用try來運行這段代碼,如果執行出錯,則后續代碼不會繼續執行,而是直接跳轉至錯誤處理代碼,即except語句塊,執行完except后,如果有finally語句塊,則執行finally語句塊,至此,執行完畢。

上面的代碼在計算10 / 0時會產生一個除法運算錯誤:

try...except: integer division or modulo by zerofinally...END

從輸出可以看到,當錯誤發生時,后續語句print 'result:', r不會被執行,except由于捕獲到ZeroDivisionError,因此被執行。最后,finally語句被執行。然后,程序繼續按照流程往下走。

如果把除數0改成2,則執行結果如下:

try...result: 5finally...END

由于沒有錯誤發生,所以except語句塊不會被執行,但是finally如果有,則一定會被執行(可以沒有finally語句)。

你還可以猜測,錯誤應該有很多種類,如果發生了不同類型的錯誤,應該由不同的except語句塊處理。沒錯,可以有多個except來捕獲不同類型的錯誤:

try: print 'try...' r = 10 / int('a') print 'result:', rexcept ValueError, e: print 'ValueError:', eexcept ZeroDivisionError, e: print 'ZeroDivisionError:', efinally: print 'finally...'print 'END'

int()函數可能會拋出ValueError,所以我們用一個except捕獲ValueError,用另一個except捕獲ZeroDivisionError。

此外,如果沒有錯誤發生,可以在except語句塊后面加一個else,當沒有錯誤發生時,會自動執行else語句:

try: print 'try...' r = 10 / int('a') print 'result:', rexcept ValueError, e: print 'ValueError:', eexcept ZeroDivisionError, e: print 'ZeroDivisionError:', eelse: print 'no error!'finally: print 'finally...'print 'END'            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桂平市| 剑阁县| 乌海市| 塔河县| 进贤县| 溧阳市| 新竹市| 茂名市| 江川县| 兴国县| 郧西县| 天全县| 郑州市| 北流市| 区。| 文山县| 简阳市| 乐山市| 丰顺县| 垣曲县| 盐津县| 石家庄市| 青铜峡市| 孙吴县| 镇安县| 林甸县| 资中县| 昌宁县| 潞西市| 香格里拉县| 龙口市| 夹江县| 华蓥市| 宜都市| 安义县| 玛曲县| 泰和县| 石狮市| 濉溪县| 永寿县| 平舆县|