異常捕捉:
1. try:
2. XXXXX1
3. raise Exception(“xxxxx2”)
4. except (Exception1,Exception2,……):
5. xxxx3
6. else:
7. xxxxx4
8. finally:
9. xxxxxxx5
1.raise 語句可以自定義報錯信息,如上。
- raise后的語句是不會被執(zhí)行了,因?yàn)橐呀?jīng)拋出異常,控制流將會跳到異常捕捉模塊。
- except 語句可以一個except后帶多個異常,也可以用多個語句捕捉多個異常,分別做不同處理。
- except語句捕捉的異常如果沒有發(fā)生,那么except里的語句塊是不被執(zhí)行的。而是執(zhí)行else里的語句
- 在上面語句中try/except/else/finally所出現(xiàn)的順序必須是try–>except X–>except–>else–>finally,即所有的except必須在else和finally之前,else(如果有的話)必須在finally之前,而except X必須在except之前。否則會出現(xiàn)語法錯誤。
6.else和finally都是可選的.
7.在上面的完整語句中,else語句的存在必須以except X或者except語句為前提,如果在沒有except語句的try block中使用else語句會引發(fā)語法錯誤。
異常參數(shù)輸出:
1. try:
2. testRaise()
3. except PreconditionsException as e: #python3的寫法,必須用as
4. print (e)
自定義異常,只需自定義異常類繼承父類Exception。在自定義異常類中,重寫父類init方法。
1. class DatabaseException(Exception):
2. def __init__(self,err='數(shù)據(jù)庫錯誤'):
3. Exception.__init__(self,err)
4.
5. class PreconditionsException(DatabaseException):
6. def __init__(self,err='PreconditionsErr'):
7. DatabaseException.__init__(self,err)
8.
9. def testRaise():
10. raise PreconditionsException()
11.
12. try:
13. testRaise()
14. except PreconditionsException as e:
15. print (e)
注意:PreconditonsException又是DatabaseException的子類。
所以如果,raise PreconditionException的話,用兩個異常類都可以捕捉。
但是, 如果是raise DatabaseException, 用PreconditonsException是捕捉不到的。