例外の捕捉
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:
#例外発生してもしなくても通る処理