當程序出現錯誤,python會自動引發異常,也可以通過raise顯示地引發異常。一旦執行了raise語句,raise后面的語句將不能執行。
演示raise用法
try: s = None if s is None: print "s 是空對象" raise NameError #如果引發NameError異常,后面的代碼將不能執行 print len(s) #這句不會執行,但是后面的except還是會走到 except TypeError: print "空對象沒有長度" s = None if s is None: raise NameError print 'is here?' #如果不使用try......except這種形式,那么直接拋出異常,不會執行到這里
觸發異常
我們可以使用raise語句自己觸發異常
raise語法格式如下:
raise [Exception [, args [, traceback]]]
語句中 Exception 是異常的類型(例如,NameError)參數標准異常中任一種,args 是自已提供的異常參數。
最后一個參數是可選的(在實踐中很少使用),如果存在,是跟蹤異常對象。
實例
一個異常可以是一個字符串,類或對象。 Python的內核提供的異常,大多數都是實例化的類,這是一個類的實例的參數。
定義一個異常非常簡單,如下所示:
def functionName( level ): if level < 1: raise Exception("Invalid level!", level) # 觸發異常后,后面的代碼就不會再執行
注意:為了能夠捕獲異常,"except"語句必須有用相同的異常來拋出類對象或者字符串。
例如我們捕獲以上異常,"except"語句如下所示:
try: 正常邏輯 except Exception,err: 觸發自定義異常 else: 其余代碼
實例
#!/usr/bin/python # -*- coding: UTF-8 -*- # 定義函數 def mye( level ): if level < 1: raise Exception,"Invalid level!" # 觸發異常后,后面的代碼就不會再執行 try: mye(0) # 觸發異常 except Exception,err: print 1,err else: print 2
執行以上代碼,輸出結果為:
$ python test.py 1 Invalid level!
python3.6以后 改為
def mye( level ): if level < 1: raise Exception("Invalid level!") # 觸發異常后,后面的代碼就不會再執行 try: mye(0) # 觸發異常 except Exception as err: print(1,err) else: print(2)
