1. 程式人生 > 實用技巧 >什麼時候Python中try異常捕獲finally一定要用到

什麼時候Python中try異常捕獲finally一定要用到

import random


def raise_valueError(fw):
    print(fw)
    raise_e = random.choice((True, False))
    if raise_e:  # 假設這個異常不一定觸發
        raise ValueError


def try_finally():
    file = 'abc.txt'
    fw = open(file, 'r')  # 檔案等資源,有開啟的話,必須關閉
    try:
        print('try runs -------------')
        raise_valueError(fw)
        # fw.close()  # 這裡fw.close()可能是執行不到的,這裡開啟檔案可以有with open單不是每種資源開啟都有with這種寫法
        return 'try'
    except ValueError:
        # fw.close()  # 這裡fw.close()也可能是執行不到的
        print('except valueError runs -------------')
        return 'except valueError'
    finally:
        fw.close()   # 這裡fw.close()是一定執行得到的
        print('finally runs -------------')
        return 'finally'

    # fw.close# 這裡fw.close()一定執行不到的


if __name__ == '__main__':
    ret = try_finally()
    print('ret', ret)  # 如有finally有return, ret一定是finally的返回值,否則是地方的返回值