[英]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.