在執行 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...