Try/Except/finally
Error
我們來看看以下的範例:
def dividedBy(dividend, divisor):
return dividend / divisor
a = int(input('被除數是'))
b = int(input('除數是'))
print('結果是' + str(dividedBy(a, b)))
如果我們輸入正確的數字,當然會進行正確的除法計算,但是如果我們使用的除數是0,那會發生什麼事呢?
我們會看到:
Traceback (most recent call last): File "", line 6, in File "", line 2, in dividedBy ZeroDivisionError: division by zero
ZeroDivisionError就是一個python直譯器直接報錯誤(Error)的方式。
例外處理
如果我們想要在程式中處理錯誤,那麼我們要使用例外處理。 我們來看看修改後的範例:
def dividedBy(dividend, divisor):
try:
return dividend / divisor
except ZeroDivisionError:
print('您使用的除數是0喔~')
a = int(input('a='))
b = int(input('b='))
print('a/b結果=' + str(dividedBy(a, b)))
然後再試著執行看看。
finally
我們可能會有機會在不管例外是否有發生,都希望執行某些程式,這時可以使用finally子句, 也就是說,不管程式有無進入except子句,最終都會執行finally子句的程式。
我們來看看修改後的範例:
def dividedBy(dividend, divisor):
try:
return dividend / divisor
except ZeroDivisionError:
print('您使用的除數是0喔~')
except:
print('有錯誤就會執行此區塊')
finally:
print('結束try-except-finally')
a = int(input('a='))
b = int(input('b='))
print('a/b結果=' + str(dividedBy(a, b)))
我們可以發現,不論你a, b輸入什麼,finally子句都會執行。 另外,except子句可以不接任何的Error在後面,此時代表只要有Error發生,就會執行except子句。
raise an exception
我們來看看以下的範例:
userInput = 123
if type(userInput) is not str:
raise Exception("Only string type is allowed")
我們可以使用raise敘述句來丟出例外,也就是如果沒有except子句將其接住,則整個程式就會直接結束, 並且以"Only string type is allowed"為說明訊息告知使用者, 這個方式,對於要將程式給予其他的開發者而言,是對其他開發者的一種有利除錯的訊息常規。 以上這個程式,如果執行的話,我們會看到:
Traceback (most recent call last): File "", line 4, in Exception: Only string type is allowed
Last updated
Was this helpful?