【发布时间】:2014-10-24 04:08:39
【问题描述】:
我有一个用于python-mpd2 的非常基本的代理类(帮助我编写它的朋友坚持认为它是一个装饰器类)。
类看起来像这样
import mpd
class MPDProxy:
def __init__(self, host="localhost", port=6600, timeout=10):
self.client = mpd.MPDClient()
self.host = host
self.port = port
self.client.timeout = timeout
self.connect(host, port)
def __getattr__(self, name):
return self._call_with_reconnect(getattr(self.client, name))
def connect(self, host, port):
self.client.connect(host, port)
def _call_with_reconnect(self, func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except mpd.ConnectionError:
self.connect(self.host, self.port)
return func(*args, **kwargs)
return wrapper
mpd_proxy = MPDProxy()
到目前为止,只要有一个 mpd 主机可以连接,它就可以很好地工作。如果没有mpd服务器,我得到
ConnectionRefusedError: [Errno 111] 连接被拒绝
我正在寻找处理这个异常的好模式
- 当没有可用的主机时,您能想出一种优雅的方法来防止程序崩溃吗?
- 无论何时调用代理,我应该在代理内部还是外部捕获异常?
- 将字符串“主机不可用”(或类似的)作为返回值是个好主意,还是可以以更好的方式通知调用代理的方法/函数?
【问题讨论】:
标签: python error-handling proxy mpd