1. 程式人生 > >python入門19 異常及異常處理 異常捕獲

python入門19 異常及異常處理 異常捕獲

 

常見異常舉例

""" 一些異常舉例:"""

'''模組不存在 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!