簡體   English   中英

Python可迭代和上下文管理器

[英]Python iterable and context manager

我想要這樣的行為:

with A() as f:
    for x in f:
        do_something(f)

這是正確的方法嗎?

class A:
    def __enter__(self):
        print "Entering context"

    def __iter__(self):
        for x in ["some","list"]:
            yield x

    def __exit__(self):
        print "Deleting context"

您的contextmanager.__enter__方法需要返回可迭代的。 可以self

def __enter__(self):
    print "Entering context"
    return self

請參閱With Statement Context Managers文檔

object.__enter__(self)

輸入與此對象相關的運行時上下文。 with語句會將此方法的返回值綁定到該語句的as子句中指定的目標(如果有)。

因此,無論該方法返回什么,都將綁定到作為as目標給出的名稱。

如果引發了異常,您的contextmanager.__exit__方法需要能夠接受該異常:

def __exit__(self, exc_type, exc_value, traceback):

沒有例外時, with語句為您提供三個None參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM