python中with的用法

2021-10-13 02:33:12 字數 2183 閱讀 1281

with是從python2.5引入的乙個新的語法,它是一種上下文管理協議,目的在於從流程圖中把 try,except 和finally 關鍵字和

資源分配釋放相關**統統去掉,簡化try….except….finlally的處理流程。

with通過__enter__方法初始化,然後在__exit__中做善後以及處理異常。

所以使用with處理的物件必須有__enter__()和__exit__()這兩個方法。

其中__enter__()方法在語句體(with語句包裹起來的**塊)執行之前進入執行,exit()方法在語句體執行完畢退出後執行。

with 語句適用於對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的「清理」操作,釋放資源,比如檔案使用後自動關閉、執行緒中鎖的自動獲取和釋放等。

with語句的基本語法格式:

with expression [as target]:

with_body

引數說明:

expression:是乙個需要執行的表示式;

target:是乙個變數或者元組,儲存的是expression表示式執行返回的結果,可選引數。

例如:

with open(『d:\***.txt』) as fp:

… print fp.read()

…我無法大是大非

我無法大是大非

我無法大是大非

with語句的工作原理:

緊跟with後面的語句會被求值,返回物件的__enter__()方法被呼叫,這個方法的返回值將被賦值給as關鍵字後面的變數,當with後面的**塊全部被執行完之後,將呼叫前面返回物件的__exit__()方法。

with語句最關鍵的地方在於被求值物件必須有__enter__()和__exit__()這兩個方法,那我們就可以通過自己實現這兩方法來自定義with語句處理異常。

示例**:

#encoding=utf-8

class opened(object):

definit(self,filename):

self.handle=open(filename)

print 「resource:%s」%filename

defenter(self):

print 「[enter%s]: allocate resource.」%self.handle

return self.handle#可以返回不同的物件

defexit(self,exc_type,exc_value,exc_trackback):

print 「[exit %s]: free resource.」 %self.handle

if exc_trackback is none:

print 「[exit %s]:exited without exception.」%self.handle

self.handle.close()

else:

print 「[exit %s]: exited with exception raised.」%self.handle

return false # 可以省略,預設的none也是被看做是false

with opened(r』d:\***.txt』) as fp:

for line in fp.readlines():

print line

結果:

opened中的__enter__() 返回的是自身的引用,這個引用可以賦值給 as 子句中的fp變數;

返回值的型別可以根據實際需要設定為不同的型別,不必是上下文管理器物件本身。

exit() 方法中對變數exc_trackback進行檢測,如果不為 none,表示發生了異常,返回 false 表示需要由外部**邏輯對異常進行處理;

如果沒有發生異常,預設的返回值為 none,在布林環境中也是被看做 false,但是由於沒有異常發生,exit() 的三個引數都為 none,上下文管理**可以檢測這種情況,做正常處理。exit()方法的3個引數,分別代表異常的型別、值、以及堆疊資訊。

python中with的用法

剛剛開始學python,今天在乙個基礎例子中看到了一行 覺得很有意思,就去研究了一下 with open config name login.txt r as f 其實這是python中的with語句,類似於php中的try catch 主要是用來檔案處理,你需要的是獲取乙個檔案控制代碼,然後從檔案...

python中with的用法

python中with的用法 清單 1.with 語句的語法格式 1 2 with context expression as target s with body 無論context expression是否發生異常,都能保證不報錯,類似於try finally正規化。enter 語句返回值賦給t...

Python中with的用法

之前再遇到with語句在檔案操作上的用法非常巧妙,以前不太熟悉,看的時候也產生一些困惑 有一些任務,可能事先需要設定,事後做清理工作。對於這種場景,python的with語句提供了一種非常方便的處理方式。其中乙個很好的例子是檔案處理,你需要獲取乙個檔案控制代碼,從檔案中讀取資料,然後關閉檔案控制代碼...