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?