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