python入門19 異常及異常處理 異常捕獲
阿新 • • 發佈:2018-11-18
常見異常舉例
""" 一些異常舉例:""" '''模組不存在 ModuleNotFoundError: No module named 'data' ''' #import data1 '''索引越界 IndexError: list index out of range ''' li = [1,2] #li[3] '''key不存在 KeyError: 'a' ''' dict1 = {} #dict1['a'] ''' NameError: name 'a' is not defined ''' #a #未定義的變數 '''縮排錯誤 IndentationError: expected an indented block''' # if 1: # return True #縮排錯誤 '''語法錯誤 SyntaxError: invalid syntax ''' #def fund x: return x ''' 型別錯誤 TypeError: can only concatenate str (not "int") to str ''' #'a' + 2 ''' 除數為0 ZeroDivisionError: division by zero''' #2/0 ''' 遞迴錯誤 未設定跳出條件 RecursionError: maximum recursion depth exceeded ''' # def f(x):# return f(x) # f(1)
異常捕獲 try except finally
"""異常捕獲 try(可能發生異常的語句) except(發生異常後處理) else(沒有發生異常後執行的語句) finally(不管有無異常都要繼續執行的語句) 不捕獲,發生異常後後程式會中斷執行。捕獲異常,可根據異常進行處理 """
#捕獲一種特定異常 try: x = 10/0 print('x=',x) #異常後的不執行 except ZeroDivisionError: print('除數不能為零') #發生異常後執行的部分 else: print('沒有除數異常') #沒有發生異常後執行 finally: x = 0 print('finally') #不管有無異常均一定會執行的部分
#捕獲多種異常 try: a x = 10/0 except (ZeroDivisionError,NameError): print('出錯了') #發生異常後執行的部分
#捕獲任何型別的異常 import traceback try: x = 10/0 a except BaseException as e: print(e) #僅顯示異常資訊 traceback.print_exc() #顯示錯誤所在詳細的堆疊資訊 print('後續程式繼續執行')
丟擲異常raise
"""丟擲異常 raise 錯誤型別(錯誤資訊)""" name = 'abc' if len(name) <= 6: raise ValueError('username必須大於6個字元') else: print('ok')
自定義異常
"""自定義異常類,繼承自已有異常類""" class userError(BaseException): pass name = 'abc' if name != 'abcd': raise userError('user error')
the end!