我试图用contextmanager隐藏一些try/except复杂性。下面是一个简单的例子:
from contextlib import contextmanager
import mpd
mpdclient = mpd.MPDClient()
mpdclient.connect("localhost", 6600)
@contextmanager
def mpdcontext():
try:
yield
except mpd.ConnectionError:
mpdclient.connect("localhost", 6600)
with mpdcontext():
mpdclient.status()
with mpdcontext():
mpdclient.lsinfo()
现在,据我所知,with语句中的块是在调用yield时执行的。在我的例子中,如果这引发了一个异常,我会重新连接到mpd。我能在重新连接之后再次执行with块吗?在
谢谢
简单的回答是,上下文管理器不能有两次让步。你可以考虑使用一个decorator来包装你正在尝试执行的内容,并在放弃之前重试并重新连接一段时间。下面是一个简单的(非生产性使用)示例来说明:
Edit:添加了对decorator的调用,在没有参数的情况下
相关问题 更多 >
编程相关推荐