Pythonで異なる例外タイプを扱うときにコードの重複を避けるための良いパターンは何ですか?私はとHTTPError simlarではなく、かなりURLErrorを扱いたい:Python:例外を捕捉する際にコードの重複を避けるには?
try:
page = urlopen(request)
except URLError, err:
logger.error("An error ocurred %s", err)
except HTTPError, err:
logger.error("An error occured %s", err)
logger.error("Error message: %s", err.read())
をこの例では、私が最初にlogger.errorコールの重複を回避したいと思います。与えられたURLErrorはHTTPErrorの親は1がこのような何かを行うことができます:
except URLError, err:
logger.error("An error occurred %s", err)
try:
raise err
except HTTPError, err:
# specialization for http errors
logger.error("Error message: %s", err.read())
except:
pass
別のアプローチは、例えばでisinstanceを使用することです。 URLErrorとHTTPErrorが継承のチェーンではないだろう場合:1は私が好むはずです
except (URLError, HTTPError), err:
logger.error("An error occured %s", err)
if isinstance(err, HTTPError):
logger.error("Error message: %s", err.read())
、別のもっと良い方法はありますか?
ありがとうTim!それは説得力があります。最初の例では、URLError、HTTPErrorの順番を確認しました。私はあなたの答えに言及したように、その例の問題を明確に示すので、質問を編集しません。 – Bernhard