1. 程式人生 > >2.3 程式的異常處理

2.3 程式的異常處理

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