Python contextlib模組使用樣本

來源:互聯網
上載者:User
看這個模組要先看with as的用法,最常用的方法就是開啟一個檔案:
複製代碼 代碼如下:


with open(“filename”) as f:
f.read()


with可以調用一個上下文管理器,產生運行時的上下文環境。上下文管理器主要定義兩個方法,__enter__,__exit__。__enter__返回上下文裡操作的對象,如f。__exit__是銷毀對象和異常處理。

contextlib模組對外有三個介面,
contextmanager裝飾器,裝飾的函數必須是一個產生器。然後返回一個函數,在函數調用的時候返回一個上下文管理器。

nested為了一次調用多個上下文管理器的時候用,將所有上下文管理器裡的__enter__放到vars裡,一次yield返回,然後unpack。就產生多個對象了。__exit__都放到exits列表裡,在finally裡統一調用,這些__exit__在調用上下文管理器產生異常時,如何處理。如果返回false,將會把異常繼續拋出,返回true則不會拋出異常。

closing,這個用過,沒想到的是竟然是個類,而不是個函數。就是把有close方法卻沒有__exit__方法的對象變成一個上下文管理器。代碼很簡單:
複製代碼 代碼如下:


class closing(object):
def __init__(self, thing):
self.thing = thing
def __enter__(self):
return self.thing
def __exit__(self, *exc_info):
self.thing.close()
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.