上下文管理器是python中的一種協議,它保證了每次**執行的一致性
一旦進入上下文管理器,就一定會按照規定的步驟退出
如果合理的設計了退出上下文管理器的步驟,就能夠很好的處理異常。
上下文管理器被最多用到的場景是資源清理操作。
實現上下文管理器,只要在類定義時,實現__enter__()方法和__exit__()方法即可
with語句結構就運用到了上下文管理器
異常語句:
try
: f =
open
("mypython.txt"
)print
(f.read())
# 捕捉錯誤
except ioerror as e:
print
(e)# 最後都會執行的語句
finally
: f.close(
);
使用with語句替代try-finally 語句,**更加的簡潔清晰。
對於需要對資源進行訪問的任務,無論在**執行過程中,是否發生異常,都會執行必要的清理操作,釋放資源。
在with語句完成時,會自動關閉檔案。如果再次讀取這個檔案,就會出現檔案關閉的錯誤提示資訊。
classa(
)def
__init__
(self, val)
: self.a = val
def__enter__
(self)
:print
("class a's __enter__ function."
)# exec_type : 異常的類
# exec_val : 例項
# exev_tb : 跟蹤記錄
# 如果with語句塊正常結束,那麼這三個引數全部是none。
def__exit__
(self, exec_type, exec_val, exec_tb)
:print
("class a's __exit__ function."
)
1.在with語句塊執行前,首先會執行enter()方法
2. 當with語句塊執行結束,無論是否出現異常,都會呼叫__exit__()方法
3.通常將清除、釋放資源的操作寫在__exit__()方法中
class
file()
:def
__init__
(self, filename, mode)
: self.filename = filename
self.mode = mode
def__enter__
(self)
:print
("執行__enter__()方法"
) self.f =
open
(self.filename, self.mode)
return self.f
def__exit__
(self,
*args)
:print
("執行__exit__()方法"
) self.f.close(
)# 以讀的方式開啟當前目錄下的mypython檔案,並輸出檔案內容。
with file(
'mypython.txt'
,'r'
)as f:
print
(f.read(
))
在執行with語句塊之前,首先執行了__enter()__方法,然後再執行with語句塊,最後執行__exit()__方法。
採用這種方式讀取檔案時,即使執行過程**現了異常,__exit()__方法也會被執行,完成關閉檔案的操作。
python 上下文管理器
上下文管理器允許你在有需要的時候,精確地分配和釋放資源。使用上下文管理器最廣泛的案例就是with語句了。想象下你有兩個需要結對執行的相關操作,然後還要在它們中間放置一段 上下文管理器就是專門讓你做這種事情的。舉個例子 with open some file w as opened file open...
python上下文管理器
上下文管理器是乙個包裝任意 塊的物件。上下文管理器保證進入上下文管理器時,每次 執行的一致性 當退出上下文管理器時,相關資源會被正確 這裡被正確 指的是在 exit 方法自定義 比如關閉資料庫游標 值得注意的是,上下文管理器一定能夠保證退出步驟的執行。如果進入上下文管理器,根據定義,一定會有退出步驟...
Python 上下文管理器
python中的上下文管理器是乙個包裝任意 塊的物件。它在處理資源的開啟關閉 異常的處理等方面有很好的實現方法。1.上下文管理器的語法 假設我們需要讀取乙個檔案中的資料,如下 try test file open test.txt r contents test file.read finally ...