2.3 程式的異常處理
阿新 • • 發佈:2019-01-07
1. 異常處理的基本用法
1.1 異常處理
異常
1/0
執行結果:
ZeroDivisionError Traceback (most recent call last)
<ipython-input-1-9e1622b385b6> in <module>()
----> 1 1/0
ZeroDivisionError: division by zero
2 ** "abc"
執行結果:
TypeError Traceback (most recent call last) <ipython-input-2-99b3a2e04327> in <module>() ----> 1 2 ** "abc" TypeError: unsupported operand type(s) for ** or pow(): 'int' and 'str'
異常處理:使程式能夠應對異常情況
try:
<語句塊1>
except:
<語句塊2>
應對所有異常情況
try:
<語句塊1>
except <異常型別>:
<語句塊2>
應對特定異常情況
try:
1/0
except:
print("某原因異常")
執行結果:
某原因異常
try:
1/0
except ZeroDivisionError:
print("除數不為零")
執行結果:
除數不為零
def foo(a):
try :
b = 100/a
except ZeroDivisionError:
print("除數不為零")
return -1
except:
print("未知錯誤")
return -2
foo(0)
執行結果
除數不為零
-1
foo("abc")
執行結果
未知錯誤
-2
2. 異常處理的高階用法
try:
<語句塊1>
except:
<語句塊2>
else: # else:當try中<語句塊1>未異常時的獎勵
<語句塊3>
finally: # finally:一定要執行的內容
<語句塊4>
try:
print(1/a)
except:
print("except")
else:
print("else")
finally:
print("finally")
a = 1
執行結果:
1.0
else
finally
try:
print(1/a)
except:
print("except")
else:
print("else")
finally:
print("finally")
a = 0
except
finally
def f(a):
try:
print(1/a)
return 1/a
except:
print("except")
return "except"
else:
print("else")
return "else"
finally:
print("finally")
return "finally"
f(1)
執行結果
1.0
finally
‘finally’
f(0)
執行結果
except
finally
‘finally’
當try-except-else-finally遇到函式
- 無論return在哪裡,finally一定執行
- try中有return, else不執行
- finally中的return會覆蓋之前所有return