1. 程式人生 > >異常處理(python3入門)

異常處理(python3入門)

 

異常處理的幾種形式:

1、except多分支

#異常處理1:
# try:
#     # print(x)
#     li = [1,2,3,]
#     # print(li[5])
#     print('=============>')
#     dic1 = {'x':1}
#     print(dic1['y'])
# except NameError as e:    #或者可以使用except (NameError,IndexError,KeyError) as e:
#     print('name',e)
# except IndexError as e:
# print('index',e) # except KeyError as e: # print('key',e) # # # print('++++++!!!!')
except多分支

 

2、except的'元組或'形式

#異常處理2:
# try:
#     # print(x)
#     li = [1,2,3,]
#     # print(li[5])
#     print('=============>')
#     dic1 = {'x':1}
#     print(dic1['y'])
#
except (NameError,IndexError,KeyError) as e: # print('++++++!!!!',e)
(錯誤1,錯誤2,錯誤3)

 

3、萬能異常

#異常處理3:
# try:
#     print(x)
#     li = [1,2,3,]
#     # print(li[5])
#     print('=============>')
#     dic1 = {'x':1}
#     print(dic1['y'])
# except Exception as e:
#     print('萬能',e)
# # print('++++++!!!!')
exception

 

4、else的使用

#異常處理4:
# try:
#     # print(x)
#     li = [1,2,3,]
#     # print(li[5])
#     print('=============>')
#     dic1 = {'x':1}
#     # print(dic1['y'])
# except NameError as e:    #或者可以使用except (NameError,IndexError,KeyError) as e:
#     print('name',e)
# except IndexError as e:
#     print('index',e)
# except KeyError as e:
#     print('key',e)
# else:
#     print('被監測的程式碼塊沒有任何異常發生時會執行else的程式碼')
else

 

5、finally的使用

#異常處理5:
try:
    # print(x)
    li = [1,2,3,]
    # print(li[5])
    print('=============>')
    dic1 = {'x':1}
    print(dic1['y'])
except NameError as e:    #或者可以使用except (NameError,IndexError,KeyError) as e:
    print('name',e)
except IndexError as e:
    print('index',e)
except KeyError as e:
    print('key',e)
else:
    print('被監測的程式碼塊沒有任何異常發生時會執行else的程式碼')
finally:
    #通常用來回收資源的動作,無論異常還是正常,都會將一些必須要回收的資源進行回收
    print('無論被監測的程式碼塊是否有異常發生,都會執行finally的程式碼體')
finally

 

#try...except 能少用,儘量少用,不到萬不得已不要去使用。(類似打補丁的效果)

# try可以只和finally連用,

# try也可以只和except連用

# 但是try不能只和else連用

 

6、斷言

#斷言

#上半部分
res = ['a','b']


#AssertionError
assert len(res) == 3  #斷定res的長度等於3,如果不等於3 就拋異常

# if len(res) != 3: #等同上述斷言的用法,但是斷言對於程式碼體bug排障 比較簡潔
#     raise TypeError


#下半部分
res[2]
assert

 

7、自定義異常

#自定義異常

class MyException(BaseException):
    def __init__(self,msg):
        self.msg = msg
    
    def __str__(self):
        return '<%s>'%self.msg

raise MyException('業務相關的錯誤')
(BaseException)