上下文管理器與 with 語句

無蹤發表於2020-12-07

1、概念
上下文管理協議(Context Management Protocol):包含enter()和exit()方法,支援該協議的物件要實現這兩個方法
上下文管理器(Context Manager):支援上下文管理協議的物件
使用with語句呼叫上下文管理器,來構建對資源的自動建立和釋放
2、with語句基本語法

with expression [as variable]:
with-block

3、上下文管理器

class Context:

def __enter__(self):
print("enter方法")

def __exit__(self, exc_type, exc_val, exc_tb):
print("exit方法")


with Context() as c:
print(c)

執行原理如下:
1、執行Context(),返回一個上下文管理器物件
2、自動呼叫上下文管理器的enter方法,如果使用了as子句,則將enter()方法的返回值賦值給as子句中的c
3、執行with中的程式碼塊
4、不論執行過程中是否發生異常,都會執行上下文管理器中的exit()方法,exit方法負責清理工作。如果執行過程中沒有異常,則以None作為引數呼叫exit
如果執行過程中發生了異常,則使用exit(exc_type, exc_val, exc_tb)呼叫

相關文章