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