3.13. 例外処理

3.13.1. try, except, finally

簡単な使用例です。足し算を行うexception_test関数を用意し、それを呼び出しています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
def exception_test(value_1, value_2):
    print ('====計算開始====')

    result = 0

    try:
        result = value_1 + value_2
    except:
        print ('計算出来ませんでした!')
    finally:
        print ('計算終了')

    return result


print(exception_test(100, 200))
print(exception_test(100, '200'))

出力

====計算開始====
計算終了
300
====計算開始====
計算出来ませんでした!
計算終了
0

関数が呼び出された後「try」配下の処理を行っています。その処理中にエラーが発生しなければ「except」配下の処理は実行されません。エラーが発生した時には必ず実行されるので、発生時の制御を細かく設定することもできます。

一回目の呼び出しの時の引数は両者ともに数値なので、except配下の処理は実行されていません。二回目の呼び出しの際の引数は片方が文字列ですので、足し算を実行することができずexcept配下の処理が実行される流れです。最後の「finally」はエラーの有無に関わらず必ず実行されるので、本来の使い方としてはオープンしたオブジェクトをクローズする処理などを記述すると良いでしょう。

3.13.2. raise

規模が大きめアプリケーションを作成している場合、他のプログラマが作成した便利な関数を利用する機会は多々あると思います。その関数内で処理が収束してもよいのなら必要はありませんが、場合によっては呼び出し元にエラーを上げ、そのエラー処理を任せた方が良いケースもあります。 それを実現するのが「raise」です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def exception_test(value_1, value_2):

    print ('====計算開始====')

    result = 0

    try:
        result = value_1 + value_2
    except:
        print ('計算出来ませんでした!')
        raise
    finally:
        print ('計算終了')

    return result


try:
    print (exception_test(100, 100))
    print (exception_test(200, 200))
    print (exception_test(300, '300'))
except:
    print ('エラーを受け取りました')

出力

計算終了
200
====計算開始====
計算終了
400
====計算開始====
計算出来ませんでした!
計算終了
エラーを受け取りました