目次
1.環境
- Debian7.11
- Python2.7.3
2.pythonでの例外処理について
まずpythonで例外キャッチしたい場合は、例外が発生する想定の処理をtry~exceptで囲みます。 そして、exceptの下に例外キャッチした場合の処理を記述します。 また、ファイルの読み書きなどやDB接続などで例外が発生した場合に例外処理した後に 保持しているコネクションを必ず開放しなくてはいけない状況などがあります、 そのような場合はexceptの次にfinalyを付けてあげることにより例外が発生しても必ず実行される処理を記述できます。
その他に、関数内とかでキャッチした箇所で例外処理を行うのではなく関数の呼び出し元で例外を処理させた場合などがある課と思います。 そのような場合はraiseというキーワードを使用して例外を呼び出し元にスローしてあげることが可能です。
では、以下にサンプルコードを載せて動きを見てみましょう。
3.エラーをキャッチしてみよう
3-1.サンプルコード
#_*_ coding: utf-8 _*_ def exceptionSample(arg1, arg2): result = 0 try: result = arg1 / arg2 except: print u'エラーが発生しました。' return result print "result = " + str(exceptionSample(2, 0))
3-2.実行結果
root@dev:~/tmp/python# python exception.py エラーが発生しました。 result = 0
4.finalyを使ってみよう
4-1.サンプルコード
#_*_ coding: utf-8 _*_ def exceptionSample(arg1, arg2): result = 0 try: result = arg1 / arg2 except: print u'エラーが発生しました。' finally: print u'finallyの中は必ず実行されます。' return result print "result = " + str(exceptionSample(2, 0))
4-2.実行結果
root@dev:~/tmp/python# python exception.py エラーが発生しました。 finallyの中は必ず実行されます。 result = 0
5.raiseを使用して例外を呼び出し元に返してみよう。
5-1.サンプルコード
#_*_ coding: utf-8 _*_ def exceptionSample(arg1, arg2): result = 0 try: result = arg1 / arg2 except: print u'エラーが発生しました。' print u'例外を呼び出し元に返します。' raise finally: print u'finallyの中は必ず実行されます。' return result try: print "1:" print "result = " + str(exceptionSample(4, 2)) print "2:" print "result = " + str(exceptionSample(2, 0)) print "3:" print "result = " + str(exceptionSample(6, 3)) except: print u'エラー受け取りました。'
5-2.実行結果
root@dev:~/tmp/python# python exception.py 1: finallyの中は必ず実行されます。 result = 2 2: エラーが発生しました。 例外を呼び出し元に返します。 finallyの中は必ず実行されます。 エラー受け取りました。
以上