Pythonの例外処理について

Pythonのプログラムを実行した時に意図しないエラーが発生する場合があります。このエラーのことを「例外」といいます。ここでは例外時の適切な処理について解説していきます。

例外を発生させてみる

例外とはどのようなものかを、実際に例外を発生させて見てみます。

num = int(input("数字を入力してください:"))

nums = [1,2,3,4,5,6]

print (("リストの中に" + str(num) + "は存在します。") if num in nums else ("リストの中に" + str(num) + "は存在しません。"))

上記プログラムを実行させて、キーボードからの入力を整数ではなく文字を入力してみます。

% python if.py
数字を入力してください:いち
Traceback (most recent call last):
  File "if.py", line 1, in <module>
    num = int(input("数字を入力してください:"))
ValueError: invalid literal for int() with base 10: 'いち'

プログラムを見ると、キーボードからの入力をint()関数を使って整数に変換しています。そのため入力として「いち」という文字列を入力すると、例外としてエラーが表示されてプログラムが終了します。
この場合、「ValueError」が例外になります。

例外処理を行う

Pythonでの例外処理は以下のような書式で記述します。

try:
  処理
except 例外:
  例外が発生した場合の処理

tryブロックに「例外が発生するかもしれない処理」を記述します。もしexceptで指定した例外が発生した場合は、exceptブロックに記載した処理が実行されます。

先ほどのプログラムに例外処理を加えてみます。

import sys

try:
    num = int(input("数字を入力してください:"))
except ValueError:
    print ("エラー:数字以外の文字を入力しないでください。")
    sys.exit()

nums = [1,2,3,4,5,6]

print (("リストの中に" + str(num) + "は存在します。") if num in nums else ("リストの中に" + str(num) + "は存在しません。"))

例外が発生した場合、プログラム自体を終了させるためにsysモジュールのexit()関数を使用します。ValueErrorが発生した場合は、エラー表示とともにsys.exit()でプログラムを終了させています。

実行結果は以下の通りです。

% python if.py
数字を入力してください:いち
エラー:数字以外の文字を入力しないでください。

このプログラムでは、except ValueError:とValueErrorの場合に絞っていますが、任意の例外に対して処理する場合は、exceptで例外を指定しないと任意の例外として処理されます。

import sys

try:
    num = int(input("数字を入力してください:"))
except:
    print ("エラー:数字以外の文字を入力しないでください。")
    sys.exit()

nums = [1,2,3,4,5,6]

print (("リストの中に" + str(num) + "は存在します。") if num in nums else ("リストの中に" + str(num) + "は存在しません。"))

例外ごとに異なる処理をさせたい場合

例外ごとに異なる処理をさせたい場合は、以下のように複数の例外処理を記述します。

try:
  処理
except 例外1:
  例外1が発生した場合の処理
except 例外2:
  例外2が発生した場合の処理

例外が発生しなかった場合の処理

exceptで指定した例外が発生しなかった場合に実行させたい処理を記述したい場合は、以下のようにelseを追加します。

try:
  処理
except 例外1:
  例外1が発生した場合の処理
except 例外2:
  例外2が発生した場合の処理
else:
  例外が発生しなかった場合の処理
try:
    num = int(input("数字を入力してください:"))
except ValueError:
    print ("エラー:数字以外の文字を入力しないでください。")
    sys.exit()
else:
    nums = [1,2,3,4,5,6]
    print (("リストの中に" + str(num) + "は存在します。") if num in nums else ("リストの中に" + str(num) + "は存在しません。"))

実行結果は以下の通りです。

% python if.py
数字を入力してください:1
リストの中に1は存在します。

% python if.py
数字を入力してください:いち
エラー:数字以外の文字を入力しないでください。

関連記事

メールマガジン

ネットワ-ク初心者のみなさま。
ネットワークの基礎知識を疎かにすることは
大変危険です!!

「初心者にも理解できるネットワーク技術」

これを読めばネットワークの基礎が分かる!!
ネットワーク関連の仕事に就きたいとお考えの学生の方や、ネットワークに興味があって転職を考えている社会人の方、まずは登録してみてください。

もちろん無料です!!

↓メールマガジン購読はこちら↓

メールアドレス: