Introduction:
可自訂義當程序出錯時,自動執行其他程序或做其他處理
Example:
1 | try: #代碼塊,邏輯 |
- 要是try代碼塊中的代碼沒有出錯則會繼續執行
- 要是try代碼塊出錯則會創建Exception類(class)對象,對象名為e,e中封裝了出錯的錯誤訊息
Types of Error:
任何的錯誤訊息都會有一個對象來表示此錯誤訊息為何
Exception (BOSS級) 可捕獲任何異常訊息
IndexError
ValueError
AttributeError
ImportError
IndentationError ….等等
Application:
可同時捕獲多種不同的錯誤,讓其進行不同的程序(錯誤的細項放前面執行,最後才用Exception)1
2
3
4
5
6
7
8try:
int("w3r")
except IndexError as e:
print("發生錯誤: ",'IndexError',e)
except ValueError as e:
print("發生錯誤: ",'ValueError',e)
except Exception as e:
print("發生錯誤: ",'Exception',e)
Usage:
else
在except之後鍵入else:
- 要是try代碼塊中執行代碼出錯 → 會捕捉錯誤訊息並執行except代碼塊中的程序
- 要是try中代碼塊中的代碼執行沒有出錯 → 當try代碼塊中代碼執行完成時則會執行else代碼塊中的程序
1 | try: |
finally
最後不管有無出錯皆會執行finally代碼塊中的代碼1
2
3
4
5
6
7
8
9
10
11
12try:
int("w3r")
except IndexError as e:
print("發生錯誤: ",'IndexError',e)
except ValueError as e:
print("發生錯誤: ",'ValueError',e)
except Exception as e:
print("發生錯誤: ",'Exception',e)
else:
print("else","執行代碼並無發生錯誤")
finally:
print("finally:....","不管最後有沒有出錯都要執行我")
Advanced :
主動觸發異常
上述所說都是由Python內部解釋器解釋時所觸發的異常
我們也可以讓程序運行時主動觸發異常 → 使用raise1
2
3
4try:
raise Exception("出現異常")
except Exception as e:
print(e)
- 用於嵌套函數中某函數執行失敗並retrun False時拋出異常,並讓日誌紀錄
- 不必在另外寫一個函數用於紀錄日誌
- 只需將出錯訊息進行raise Exception 於except Exception代碼塊中連同其他出錯訊息一起記錄
自訂義異常(編寫一個類)
1 | class self_definitionError(Exception): |
assert(斷言)
assert 後的條件成立則繼續執行,條件不成立時 程序報錯為AssertionError
用於強制用戶服從,不服從則報錯,可用Exception捕獲異常,但一般不會這麼做
example I
條件成立,沒有發生異常1
2assert 1 == 1
print('OK')
顯示:1
OK
example II
條件不成立,發生AssertionError異常1
2assert 1 == 2
print('OK')
顯示:1
2
3Traceback(most recent call last):
assert 1 == 2
AssertionError
conclusion
多線程會使用到此方法,通常用在寫好的程序中前面加入assert條件判斷
欲使用程序必須滿足assert後面的條件才能運行
類似if else