国产探花免费观看_亚洲丰满少妇自慰呻吟_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'            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肥西县| 高尔夫| 涞水县| 兴安县| 当阳市| 普兰县| 南漳县| 视频| 丰镇市| 安化县| 眉山市| 柳河县| 封丘县| 深州市| 岱山县| 青海省| 杭锦旗| 巴林右旗| 应用必备| 平远县| 阿拉善右旗| 恭城| 黄石市| 南京市| 张家港市| 岑溪市| 岚皋县| 手游| 丰原市| 怀远县| 新营市| 赣榆县| 仙游县| 双城市| 河间市| 威信县| 沁源县| 固始县| 四川省| 贵定县| 鹤山市|