相关疑难解决方法(0)

如何使用循环内部管理器?

我想要这样的东西:

from contextlib import contextmanager

@contextmanager
def loop(seq):
    for i in seq:
        try:
            do_setup(i)
            yield # with body executes here
            do_cleanup(i)
        except CustomError as e:
            print(e)

with loop([1,2,3]):
    do_something_else()
    do_whatever()
Run Code Online (Sandbox Code Playgroud)

但是contextmanager不起作用,因为它期望生成器只生成一次.

我想要这个的原因是因为我基本上想要自己定制循环.我有一个改进的IPython,用于控制测试设备.它显然是一个完整的Python REPL,但大多数时候用户只是调用预定义函数(类似于Bash提示符),并且用户不应该是程序员或熟悉Python.需要有一种方法可以通过每次迭代的setup/cleanup和异常处理来循环一些任意代码,并且它应该像上面的with语句一样简单.

python contextmanager

10
推荐指数
2
解决办法
2384
查看次数

标签 统计

contextmanager ×1

python ×1