else
声明のオプション節の意図された使用法は何ですかtry
?
ベストアンサー1
ブロック内のステートメントは、例外がなかった場合、else
実行がブロックの一番下から外れた場合に実行されます。正直なところ、必要性を感じたことがありません。try
しかし、例外の処理ノート:
else 句を使用すると、try ... except ステートメントによって保護されているコードによって発生しなかった例外を誤ってキャッチすることが回避されるため、try 句に追加のコードを追加するよりも効果的です。
したがって、たとえば をスローする可能性のあるメソッドがあり、IOError
そのメソッドによって発生する例外をキャッチしたいが、最初の操作が成功した場合に別の操作を実行し、その操作から IOError をキャッチしたくない場合は、次のように記述します。
try:
operation_that_can_throw_ioerror()
except IOError:
handle_the_exception_somehow()
else:
# we don't want to catch the IOError if it's raised
another_operation_that_can_throw_ioerror()
finally:
something_we_always_need_to_do()
another_operation_that_can_throw_ioerror()
の後に置くとoperation_that_can_throw_ioerror
、 はexcept
2番目の呼び出しのエラーをキャッチします。また、 をブロック全体の後に置くとtry
、 が実行されるまで常に実行されませんfinally
。else
を使用すると、
- 2番目の操作は例外がない場合にのみ実行されます。
- ブロックの前に実行され
finally
、 - それが引き起こすいかなるsも
IOError
ここでは捕捉されない