1.try except

[參考](https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143191375461417a222c54b7e4d65b258f491c093a515000)
try:
    print('try...')
    r = 10 / 0
    print('result:', r)
# 如果發生ZeroDivisionError會被捕捉到,這邊也可以試著捕捉不同錯誤
except ZeroDivisionError as e:
    print('except:', e)
# finally就是不管發生有沒有捕捉到錯誤都要做的事情
finally:
    print('finally...')
print('END')

# 所有錯誤類別都繼承自BaseException,要注意的就是捕捉錯誤時,除了會捕捉該類別錯誤,他的子類別錯誤也會捕捉
# 下面例子只會捕捉到ValueError,永遠不會捕捉到UnicodeError,因為就算發生的是UnicodeError,也會先被他的父類別ValueError捕捉到
try:
    main()
except ValueError as e:
    print('ValueError')
except UnicodeError as e:
    print('UnicodeError')

# 因為錯誤也是類別,捕捉一個錯誤就是捕捉到該類別的一個instance。因此錯誤並不是憑空產生的,而是有意建立instance並拋出
# python內建會幫我們拋出許多錯誤,但我們也可以自定義何時要拋出甚麼錯誤,用raise statement
def test(s):
    n = int(s)
    if n==0:
        raise ValueError('invalid value: {}'.format(s))
    return 10 / n

results matching ""

    No results matching ""