私はこれのような階層と同様のコードを手に入れました:
class FrontendException:
pass
class BackendException:
pass
class BackendRequest:
def exec():
raise BackendException()
class Frontend:
def cmd_a():
BackendRequest().exec()
def cmd_b():
BackendRequest().exec()
目標は、開発者がのFrontend
関数内のオブジェクトと例外を操作できるようにすることcmd_x
ですFrontend
。
基本的に、私は一般的なBackendException
タイプを処理する場所が必要FrontendException
です。例えば:
class Frontend:
def cmd_a():
try:
BackendRequest().exec()
except BackendException as e:
raise FrontendException()
そして、これは各機能で繰り返されcmd_x
ます!とても醜いです!そしてそれはBackend
物事で動作します!繰り返される例外処理を削除したい。
助言がありますか?
ところで、私の解決策ですが、私もそれが醜いと思うので、あなたが私に何かを提案しようとした後にそれを見てください。多分あなたは私の解決策について私に何かを提案するでしょう。
class BaseFrontend:
def exec_request(req):
try:
return req.exec()
except BackendException as e:
raise FrontendException
class Frontend(BaseFrontend):
def cmd_a():
result self.exec_request(BackendRequest())
def cmd_b():
result self.exec_request(BackendRequest())
編集:わかりました、はい、私は知っています、私は単純なAPIを構築するために多くのクラスを作成する必要はありません。しかし、結果に必要なものを見てみましょう。
class APIManager:
def cmd_a(): ...
def cmd_b(): ...
このマネージャーは、各コマンドを実行するためにHTTPRESTサービスにアクセスする必要があります。したがって、RESTリクエスト中にエラーが発生した場合は、例外APIManagerExceptionを発生させる必要があります-APIManagerユーザーが何であるかを知らないため、終了できません。の引数。だから私はいくつかの一般的なケースのために有益な例外を提起する必要があります。それをただ1つの例外としましょう- 。しかし、私は各コマンドで、各pycurlリクエストに対して毎回ブロックを繰り返したくありません。実際、 pycurlエラーを解析するのではなく、でいくつかのエラーを処理したいと思います。raw pycurl exception
pycurl
pycurl error
ID
cmd_x
APIManagerException
try...except
commands(functions cmd_x)