with上下文管理器

2021-08-28 05:10:50 字數 1897 閱讀 7157

在執行 with 語句時,首先執行 with 後面的 open **

執行完**後,會將**的結果通過 as 儲存到 f 中

然後在下面實現真正要執行的操作

在操作後面,並不需要寫檔案的關閉操作,檔案會在使用完後自動關閉

實際上,在檔案操作時,並不是不需要寫檔案的關閉,而是檔案的關閉操作在 with 的上下文管理器中的協議方法裡已經寫好了。

當檔案操作執行完成後, with語句會自動呼叫上下文管理器裡的關閉語句來關閉檔案資源。

with 語句在執行時,需要呼叫上下文管理器中的 __enter__ 和 __exit__ 兩個方法。

__enter__ 方法會在執行 with 後面的語句時執行,一般用來處理操作前的內容。比如一些建立物件,初始化等。

__exit__ 方法會在 with 內的**執行完畢後執行,一般用來處理一些善後收尾工作,比如檔案的關閉,資料庫的關閉等。

class mycount(object):

def __init__(self, x, y):

self.__x = x

self.__y = y

def __enter__(self):

"""with退出時自動執行的語句"""

print("with退出時執行的語句")

# 需要注意的是:

# 1.mycount()建立物件並命名為mc====>with mycount(6, 0) as mc:相當於mc = mycount(6, 0)

# 2.在使用div方法之前會先呼叫__enter__方法,self代表的就是mc

# 3.所以直接返回self即可,也可以不返回,沒有影響

return self

def __exit__(self, exc_type, exc_val, exc_tb):

# 通過 引數接收到的值,來判斷程式執行是否出現異常

# 如果是 none ,說明沒有異常

print("with結束時自動執行的語句")

if exc_type == none:

print('計算正確執行')

else:

# 否則出現異常,可以選擇怎麼處理異常

print(exc_type)

print(exc_val)

print(exc_tb)

# 返回值決定了捕獲的異常是否繼續向外丟擲

# 如果是 false 那麼就會繼續向外丟擲,程式會看到系統提示的異常資訊

# 如果是 true 不會向外丟擲,程式看不到系統提示資訊,只能看到else中的輸出

with 語句主要是為了簡化**操作。

with 在執行過程中,會自動呼叫上下文管理器中的 __enter__ 和 __exit__ 方法

__enter__ 方法主要用來做一些準備操作

__exit__ 方法主要用來做一些善後工作

如果你和我有共同愛好,我們可以加個好友一起交流!

with上下文管理器

上下文管理器 任何實現了enter 和exit 法的物件都可稱之為上下 管理 器,上下 管理器物件可以使 with 關鍵字。顯然,件 file 物件也實現 了上下 管理器 方法一class file def init self,filename,mode self.filename filename...

上下文管理器

今天我們聊聊上下文管理器,當然今天所談僅為個人觀點!今天如果不是學生面試回來跟我聊到了上下文管理器,我都忘了python中還有這麼個鬼了。特別寫一篇博文我們簡單聊聊。普通的檔案操作方式,例如 情況01 1 以寫的方式開啟檔案 f open 1.txt w 2 寫入檔案內容 f.write hello...

python 上下文管理器

上下文管理器允許你在有需要的時候,精確地分配和釋放資源。使用上下文管理器最廣泛的案例就是with語句了。想象下你有兩個需要結對執行的相關操作,然後還要在它們中間放置一段 上下文管理器就是專門讓你做這種事情的。舉個例子 with open some file w as opened file open...