【Python】例外処理を身につける

  • 2019年9月8日
  • 2020年4月3日
  • Python

こんにちは!

皆さんは、プログラムを書くときにきちんと例外処理を書いていますか?

例外とは、プログラム実行時に出るエラーのことで、例外処理は、その例外発生時にプログラムを止めずに実行する処理になります。

例外処理を行わないと、エラーが発生した場合に、プログラムが止まってしまいます。

エラーが発生したら止まってしまうプログラムは、良いプログラムだとは言えませんね。

そこで今回は、「try ~ except文」を用いて、Pythonで例外処理を行う方法を紹介します。

基本的な例外処理

基本的な例外処理には、「try ~ except文」を使用します。

書式

基本的な例外処理の書式は以下のようになります。

try:
    例外が発生するかもしれない処理
except:
    例外発生時の処理


次のプログラムは、入力された整数をそのまま表示するプログラムです。整数以外が入力された場合は「整数ではありませんと表示します。」

while True:
    num = input("整数を入力(終了:quit) >")
    if num == 'quit':
        print("終了")
        break

    try :
        print("入力された整数:", int(num))

    except :
        print("整数ではありません")

実行結果

整数を入力(終了:quit) >1
入力された整数: 1
整数を入力(終了:quit) >1.1
整数ではありません
整数を入力(終了:quit) >a
整数ではありません
整数を入力(終了:quit) >quit
終了

エラーが出る操作を行っても、プログラムを止めることなく動作を続けられていますね!


finallyを用いた例外処理

finallyを用いることによって、try文を抜ける際に必ず実行する処理を記述することができます。

書式

finallyを用いた例外処理の書式は以下のようになります。

try:
    例外が発生するかもしれない処理
except:
    例外発生時の処理
finally:
    try文を抜けるときに実行する処理


次のプログラムは、入力された整数をそのまま表示するプログラムです。finallyによって、ループの区切りをわかりやすくしています。

while True:
    num = input("整数を入力(終了:quit) >")
    if num == 'quit':
        print("終了")
        break

    try :
        print("入力された整数:", int(num))

    except :
        print("整数ではありません")

    finally :
        print("次のループ↓")

実行結果

整数を入力(終了:quit) >1
入力された整数: 1
次のループ↓
整数を入力(終了:quit) >1.1
整数ではありません
次のループ↓
整数を入力(終了:quit) >a
整数ではありません
次のループ↓
整数を入力(終了:quit) >quit    
終了

終了を選択した場合には、try文は実行されないため、finallyブロックの処理は行われません。


例外の種類によって処理を分ける

例外の種類、つまりエラーの種類によって処理を振り分けることができます。


書式

例外処理を振り分ける際の書式は以下のようになります。

try:
    例外が発生するかもしれない処理
except 例外名1:
    例外名1発生時の処理
except 例外名2:
    例外名2発生時の処理
except:
    例外名1,2どちらでもない例外発生時の処理

例外名とは例えば、「ValueError」「ZeroDivisionError」などが挙げられます。

組み込み例外のすべては以下のPython公式ドキュメントの組み込み例外ページで確認できます。

組み込み例外

また、どの例外が発生するか分からない場合は、実際に例外を発生させて確認することができます。

次のプログラムは、100を入力された整数で割るプログラムです。整数以外が入力された場合は「整数ではありません」、0が入力された場合は「0以外の整数を入力してください」と出力します。

while True:
    num = input("整数を入力(終了:quit) >")
    if num == 'quit':
        print("終了")
        break

    try :
        print("入力された整数:", int(num))
        a = 100 / int(num)
        print(a)

    except ValueError:
        print("整数ではありません")

    except ZeroDivisionError:
        print("0以外の整数を入力してください")

実行結果

入力された整数: 2
50.0
整数を入力(終了:quit) >3
入力された整数: 3
33.333333333333336
整数を入力(終了:quit) >2.2
整数ではありません
整数を入力(終了:quit) >0
入力された整数: 0
0以外の整数を入力してください
整数を入力(終了:quit) >quit
終了

整数以外を入力した場合と、0を入力した場合どちらもエラーが出るのですが、それぞれ出力結果が違っているのがわかりますね。


まとめ

いかがでしたか?

例外処理の方法について理解できたでしょうか?

例外処理はtry文を使って、エラーが出る処理でも、プログラムを止めることなく処理を続けられるようにする処理です。

例外処理を記述することによって、エラーが出る操作を行ってもプログラムが止まらない良いプログラムを作成できるようになります。

例外処理をうまく使って、より可用性の高いプログラムを作れるようになりましょう!

広告