例外処理(try, except, finally)

例外の捕捉

try:
  # 例外が発生する可能性のある処理
except: #例外すべて
  # 例外発生時の処理

例外オブジェクトの指定

try:
  # 例外が発生する可能性のある処理
except HogeError as e: #HogeErrorの捕捉
  # 例外発生時の処理

例外に捕捉されなかったら else

try:
  # 例外が発生する可能性のある処理
except:
  # 例外発生時の処理
else:
  # 例外発生しなかったら

tryの後ろに書くのとほぼ同等だが、try~exceptで保護したいコードを間違って捕捉するということを避けられるので、保護したいコードと明示的に分離するのにelse節に書くほうがよい。

例えば、

try:
  処理A
  # 処理B?
except:
  例外処理X
else:
  処理B

と書いた場合に、処理Aの次の行に処理Bを書けば、例外が発生したときは処理A→例外処理Xとなり、例外が発生しなかったときは処理A→処理Bとなり同じような動作になると考えられる。しかし処理Bで例外が発生した場合に違いがでる。上記の例では処理Bで例外が発生した場合、捕捉されていない例外としてジャンプすることになるが、処理Aの次の行に書いた場合は例外処理Xが動いてしまう。処理Aの例外処理をするつもりが処理Bの例外処理をすることになる。

コードによる例外の発生 raise

try:
  raise NameError('Foo'(  #NameErrorを引数'Foo'で創出
except NameError as ne:
  print "Name Error! " + ne.args[0]

発生してもしなくて必ず通る処理 finally

try:
  #例外発生するかもしれない処理
finally:
  #例外発生してもしなくても通る処理
関連記事:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)