私は次のコードを持っています:
_ try:
pk = a_method_that_may_raise_an_exception()
except:
method_to_be_executed_in_case_of_exception_or_pk_is_false()
else:
if pk:
process_pk()
else:
method_to_be_executed_in_case_of_exception_or_pk_is_false()
_
これは次のように書くことができます:
_ try:
if a_method_that_may_raise_an_exception():
process_pk()
else:
method_to_be_executed_in_case_of_exception_or_pk_is_false()
except:
method_to_be_executed_in_case_of_exception_or_pk_is_false()
_
メソッドmethod_to_be_executed_in_case_of_exception_or_pk_is_false()
が2回表示されるのは不満です。つまり、ifとtry ... exceptの両方のelseに表示されます。
これを行うためのより良い方法はありますか?
次のことを試すことができます。
class PKIsFalseException(Exception):
pass
try:
pk = a_method_that_may_raise_an_exception()
if not pk: raise PKIsFalseException()
except (PKIsFalseException, CatchableExceptions):
method_to_be_executed_in_case_of_exception_or_pk_is_false()
すべての例外をキャッチするのではなく、特定の例外キャッチで更新しました。これは、他の人が指摘しているように、常に悪い習慣です。メソッドがCatchableExceptions
の1つをスローすると仮定します。
次のようなものはどうですか?
try:
pk = a_method_that_may_rise_an_exception()
except HandleableErrors:
pk = False
finally:
if pk:
process_pk()
else:
method_to_be_executed_in_case_of_exception_or_pk_is_false()
本当に、ここではfinally
句さえ必要ありません...
try:
pk = a_method_that_may_rise_an_exception()
except HandleableErrors:
pk = False
if pk:
process_pk()
else:
method_to_be_executed_in_case_of_exception_or_pk_is_false()
後で関数から戻ると、次のようになります。
try:
pk = a_method_that_may_rise_an_exception()
except:
pass
else:
if pk:
process_pk()
return
method_to_be_executed_in_case_of_exception_or_pk_is_false()