【发布时间】:2020-07-23 11:51:21
【问题描述】:
我想使用来自其他函数的 with 语句 不幸的是,如果我产生它的值,它被认为是一个生成器,我不能将它用作调用函数中的上下文管理器
class Something:
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
pass
def do_something(self):
pass
def do_something_else(self):
pass
def inner_context_manager():
with Something() as a:
a.do_something()
yield a
def test_inner_context_manager():
with inner_context_manager() as b: # NOT WORKING -> AttributeError: __enter__
b.do_something_else()
for b in inner_context_manager(): # WORKING
b.do_something_else()
【问题讨论】:
-
您的意思是使用
contextlib.contextmanager装饰器吗?您看起来像是模仿了使用装饰器但没有装饰器的代码。 -
谢谢,太好了,我正在更新答案!
标签: python generator contextmanager