3

私は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] 接続が拒否されました

この例外に対処するための適切なパターンを探しています

  • 利用可能なホストがない場合に、プログラムがクラッシュするのを防ぐエレガントな方法を思いつくことができますか?
  • プロキシが呼び出されるたびに、プロキシ内または外部で例外をキャッチする必要がありますか?
  • 戻り値として文字列 "Host not available" (または同様のもの) を使用することをお勧めしますか、それともプロキシを呼び出すメソッド/関数により良い方法で通知できますか?
4

1 に答える 1