當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python contextlib.ExitStack用法及代碼示例


用法:

class contextlib.ExitStack

一種上下文管理器,旨在使以編程方式組合其他上下文管理器和清理函數變得容易,尤其是那些可選的或由輸入數據驅動的那些。

例如,一組文件可以很容易地在一個 with 語句中處理,如下所示:

with ExitStack() as stack:
    files = [stack.enter_context(open(fname)) for fname in filenames]
    # All opened files will automatically be closed at the end of
    # the with statement, even if attempts to open files later
    # in the list raise an exception

每個實例維護一個已注冊的回調堆棧,當實例關閉時(在with 語句的末尾顯式或隱式地)以相反的順序調用這些回調。請注意,當上下文堆棧實例被垃圾收集時,回調是隱式調用的not

使用此堆棧模型,以便可以正確處理在其__init__ 方法中獲取其資源(例如文件對象)的上下文管理器。

由於注冊的回調是以注冊的相反順序調用的,因此最終表現得好像多個嵌套的 with 語句已與注冊的回調集一起使用。這甚至擴展到異常處理——如果內部回調抑製或替換異常,則外部回調將根據更新後的狀態傳遞參數。

這是一個相對較低級別的 API,它負責正確展開退出回調堆棧的細節。它為以應用程序特定方式操作退出堆棧的更高級別的上下文管理器提供了合適的基礎。

3.3 版中的新函數。

相關用法


注:本文由純淨天空篩選整理自python.org大神的英文原創作品 contextlib.ExitStack。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。