明示的に例外を発生させることは、幅広いユースケースで明らかに役立ちます。しかし、ローカルスコープ内でキャッチされるように特別に例外を発生させているときは、おそらくあなたに似た一連の狭いケースについて話しているでしょう。
こちらも一般的には問題ありません。どのユースケースにおいても、それが最も読みやすいコードである場合もそうでない場合もありますが、それは実際には何よりもスタイルの判断です。
マイナーな DRY 違反を犠牲にして、例外なくこれを行うことができます。
try:
# Some code that might fail
b = float(a)
# Some condition I want to check
if b < 0:
b = 999.
except ValueError:
# This code should be run if the code fails
# or the condition is not met
b = 999.
…または、ロジックを少し並べ替えるという犠牲を払って:
b = 999.
if a >= 0:
try:
b = float(a)
except ValueError:
pass
または、 を作成する代わりに、 をSpecialError
使用しますValueError
。このブロックを超えてエスケープすることはなく、コードはとにかくそれらを同じように扱うため、何も追加していません:
try:
b = float(a)
if b < 0:
raise ValueError
except ValueError:
b = 999.
あなたが一番好きな方を使ってください。誰も文句を言いません。あなたが一番好きなものが を含まない場合raise
、答えは「はい、もっと良い方法があります」だと思います。もしそうなら、答えは「いいえ、それが最善の方法です」です。:)