使用 contextlib.contextmanager 定义的上下文管理器发送

2024-04-26 22:36:29 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个上下文管理器:

@contextmanager
def cm(x):
    y = f(x)
    z = yield y
    g(z)

如何将z发送到上下文管理器?在

我试过了:

^{pr2}$

但是我得到了stop迭代,这可能是因为send产生了?在


Tags: send管理器defcmstopyieldcontextmanagerpr2
1条回答
网友
1楼 · 发布于 2024-04-26 22:36:29

@contextmanager返回一个helper函数,该函数返回一个GeneratorContextManager实例,使用生成器作为管理上下文的方法。在

它不打算用作您可以发送到的任何内容,next()__enter__中被调用。您可以尝试使用.gen属性访问底层生成器:

my_cm.gen.send(123)

但是您必须包含一个额外的yield语句,以防止方法过早退出。注意,__exit__将再次调用next()来结束生成器。在

^{pr2}$

{{{cd8}管理器在最后一次调用cd3}准备就绪。在

相关问题 更多 >