首頁 > 軟體

Python學習之例外處理的避坑指南

2022-03-17 19:01:54

最終想了想,還是把這個章節單獨拎出來,雖然字數不多。

在程式碼中,存在return也應當執行finally;

存在return時,else是不執行的;

無return時,else正常執行;

如果發生異常,則else也不執行

finally 與 return 的執行順序

範例程式碼如下:

class Test(object):

    def division(self, num1, num2):
        try:
            if num2 == 0:
                return '除數不能為0'
            avg = num1 / num2
            return avg
        except Exception as e:
            print('ERROR')
        finally:
            print('FINALLY')


if __name__ == '__main__':
    test = Test()
    print(test.division(6, 0))
    
# >>> 執行結果如下:
# >>> FINALLY
# >>> 除數不能為0 

注意:即使有return也要是會執行finally的,而且是在return之前執行它。那麼最後的結果為。

else 與 return 的執行順序

範例程式碼如下:

class Test(object):

    def division(self, num1, num2):
        try:
            avg = num1 / num2
            return avg
        except Exception as e:
            print('ERROR')
        else:
            print('No ERROR')
        finally:
            print('FINALLY')


if __name__ == '__main__':
    test = Test()
    print(test.division(6, 2))


# >>> 執行結果如下:
# >>> FINALLY
# >>> 3.0

注意:有return時else是不執行的。所以執行結果如上面的範例程式碼

那麼 無 return 時,執行結果又怎樣?

class Test(object):

    def division(self, num1, num2):
        try:
            avg = num1 / num2
            # return avg
        except Exception as e:
            print('ERROR')
        else:
            print('No ERROR')
        finally:
            print('FINALLY')


if __name__ == '__main__':
    test = Test()
    print(test.division(6, 2))
    
# >>> 執行結果如下:
# >>> No ERROR
# >>> FINALLY
# >>> None

從執行結果我們得出結論:無return時,正常執行else 。

如果是發生異常的情況下, else 也是不會執行的。程式碼範例如下:

class Test(object):

    def division(self, num1, num2):
        try:
            avg = num1 / num2
            return avg
        except Exception as e:
            print('ERROR')
        else:
            print('No ERROR')
        finally:
            print('FINALLY')


if __name__ == '__main__':
    test = Test()
    print(test.division(4, 0))
    
# >>> 執行結果如下:
# >>> ERROR
# >>> FINALLY
# >>> None

總結

1、finally 與 return 的執行 順序;即使有 return 也要執行 finally 的, 而且是在 return 之前執行它。

2、else 與 return 的執行順序;有 return 時, else 是不執行的。無 return 時, 正常執行的 else 如果發生異常則不會繼續執行else。

到此這篇關於Python學習之例外處理的避坑指南的文章就介紹到這了,更多相關Python例外處理內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com