さっしーブログ

埼玉県在住のシステムエンジニアです。基本的には技術的な内容を中心に発信していきます。

Python入門 例外処理を行ってみよう

f:id:y_saiki:20171024233602j:plain

目次

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の中は必ず実行されます。
エラー受け取りました。

以上