Python上下文管理器

2021-10-02 14:27:48 字數 1882 閱讀 1725

上下文管理器是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 ...