我想要这样的东西:
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语句一样简单.