1. 程式人生 > >python with 語句妙用

python with 語句妙用

body 原理 value 協議 span print int ger world

class aa():
    def bb(self):
        print("hhhh")
        return "hello world"

    def __enter__(self): # 必須有__enter__
        print("enter")
        return self

    def cc(self):
        print("www")

    def __exit__(self, exc_type, exc_val, exc_tb): # 必須有結束__exit__
        print(
"exit") def ll(): with aa() as a: return a.bb() res = ll() print(res)

結果:

enter
hhhh
exit
hello world

原理:自定義上下文管理器

開發人員可以自定義支持上下文管理協議的類。自定義的上下文管理器要實現上下文管理協議所需要的 __enter__() 和 __exit__() 兩個方法:

    context_manager.__enter__() :進入上下文管理器的運行時上下文,在語句體執行前調用。with 語句將該方法的返回值賦值給 
as 子句中的 target,如果指定了 as 子句的話 context_manager.__exit__(exc_type, exc_value, exc_traceback) :退出與上下文管理器相關的運行時上下文,返回一個布爾值表示是否對發生的異常進行處理。
參數表示引起退出操作的異常,如果退出時沒有發生異常,則3個參數都為None。如果發生異常,返回 True 表示不處理異常,否則會在退出該方法後重新拋出異常以由 with 語句之外的代碼邏輯進行處理。如果該方法內部產生異常,則會取代由 statement
-body 中語句產生的異常。
要處理異常時,不要顯示重新拋出異常,即不能重新拋出通過參數傳遞進來的異常,只需要將返回值設置為 False 就可以了。之後,上下文管理代碼會檢測是否 __exit__() 失敗來處理異常

python with 語句妙用