1. 程式人生 > >try except 異常處理

try except 異常處理

在寫程式時出現異常或者錯誤的情況,導致程式的終止。

可以使用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來釋放資源,不要忘記在處理異常後做清理工作或者回滾操作

以後再補