try except 異常處理
阿新 • • 發佈:2018-12-07
在寫程式時出現異常或者錯誤的情況,導致程式的終止。
可以使用try...except...finally語句塊來處理異常
try...except
a=10
b=0
c = a/b
-----------------------------------------
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
報錯後修改
a=10 b=0 try: c = a/b print(c) except: print ("error") ---------------------- error
另一個例子
my_age = 25
user_input = input("input your guess num:")
if user_input == my_age:
print("bingo!")
elif user_input > my_age:
print("錯了")
input your guess num:a --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-4-005e1875b885> in <module>() 4 if user_input == my_age: 5 print("bingo!") ----> 6 elif user_input > my_age: 7 print("錯了") TypeError: '>' not supported between instances of 'str' and 'in
my_age = 25
user_input = input("input your guess num:")
while True:
try:
user_input = float(user_input)
break
except:
user_input = input("輸入錯誤,只能為數字,請輸入:")
if user_input == my_age:
print("bingo!")
else:
print("錯了")
input your guess num:a 輸入錯誤,只能為數字,請輸入:
try...finally
a=10
b=0
try:
c = a/b
print(c)
finally:
print("always excute")
--------------------------------
always excute
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ZeroDivisionError: division by zero
雖然有異常發生,但在程式終止前,finally中的語句也能正常執行。
try...except...finally
a=10
b=0
try:
c = a/b
print(c)
except:
print ("error")
finally:
print("always excute")
--------------------------------
error
always excute
總結(參考):
- except語句不是必須的,finally語句也不是必須的,但是二者必須要有一個,否則就沒有try的意義了。
- except語句可以有多個,Python會按except語句的順序依次匹配你指定的異常,如果異常已經處理就不會再進入後面的except語句。
- except語句可以以元組形式同時指定多個異常。
- except語句後面如果不指定異常型別,則預設捕獲所有異常,你可以通過logging或者sys模組獲取當前異常
- 如果要捕獲異常後要重複丟擲,請使用raise,後面不要帶任何引數或資訊。
- 儘量使用內建的異常處理語句來 替換try/except語句,比如with語句,getattr()方法
- 切記使用finally來釋放資源,不要忘記在處理異常後做清理工作或者回滾操作
以後再補