プログラミングをしていると必ずと言っていいほどエラーが起きます。数字の足し算をしようとしたら片方が文字だった、ファイルを開くのに失敗した、などです。そのため、プログラミングではエラーが起きた際に現在の処理を中断して別の処理を行う「例外処理」が欠かせない物となっています。
今回はpythonで例外処理を行う方法を説明します。

try-exceptで例外をつかむ

Pythonで例外処理を行うにはtry-exceptを使用します。try-exceptの使い方は以下のとおりです。

try:
    例外が起きるかもしれない処理
except 例外のタイプ(省略可):
    例外が起きた際の処理

まず、tryブロックの中に例外(エラー)が起きるかもしれない処理を書きます。その後、exceptの中に例外が起きた際に行う処理を書きます。こうすることで、例外が起きるとそこで処理が中断され、exceptの中の処理が実行されます。
exceptの後ろに例外のタイプを書くことで特定の例外の時だけ処理を行うことができますが、例外のタイプを省略し、すべての例外で同じように処理することもできます。
例として次のようなプログラムがあるとします。

num1   = 5
num2   = '7'
answer = num1 + num2
print('num1 + num2 = {}'.format(answer))

このプログラムを実行すると次のようなエラーがでます。

TypeError: unsupported operand type(s) for +: 'int' and 'str'

このプログラムは本来なら数字同士の足し算をしたかったのに片方が文字になっているためTypeErrorというエラーが起きています。これに対して例外処理を行うと次のようになります。

num1   = 5
num2   = '7'
answer = 0
try:
    answer = num1 + num2
except TypeError:
    print('エラー!:両方とも数字にしてください。')
print('num1 + num2 = {}'.format(answer))

実行結果

エラー!両方とも数字にしてください。
num1 + num2 = 0

エラーをキャッチし、代わりにexceptブロックの中にある処理を行っています。この例ではわざとエラーが起きるようにしているためコードを見ればすぐにエラーが分かりますし、そもそも大したエラーでもありません。
しかしエラーによっては原因が分かりづらかったり、プログラムがフリーズするなど重大なバグを起こすことがあります。そのため、エラーが発生しそうな場合は必ず例外処理が必要です。

elseで例外が発生しなかった場合の処理を行う

さきほどの例では例外が発生してもprint文が実行されていましたが、例外が発生した場合は計算が行われないのでprintは必要ありませんね。また、例外が発生した場合はtryブロックの中身が実行されないので、いちいち上でanswerを定義しています。これらの手間はelseを使うことで省くことができます。

num1   = 5
num2   = '7'
try:
    answer = num1 + num2
except TypeError:
    print('エラー!')
else:
    print('num1 + num2 = {}'.format(answer))

実行結果

エラー!

elseはif文でもお馴染みです。例外処理で使う場合elseブロックは例外が発生しなかった場合に行う処理です。こうすることで例外が起きず計算が正しく行われた時だけprintを実行するようになりました。

finallyで例外の有無に関係なく処理を行う

exceptには例外が発生した際に行う処理、elseには例外が発生しなかった時に行う処理をそれぞれ記述しました。もし例外の発生に関係なく行いたい処理がある場合はfinallyブロックの中に記述します。
例1:

num1   = 5
num2   = '7'
try:
    answer = num1 + num2
except TypeError:
    print('エラー!')
else:
    print('num1 + num2 = {}'.format(answer))
finally:
    print('計算を終わります。')

実行結果

エラー!
計算を終わります。

例2:

num1   = 5
num2   = 7  #数字にする
~以下例1と同じなので省略~

実行結果

num1 + num2 = 12
計算を終わります。

例1は例外が発生したとき、例2は例外が発生しなかったときですが、どちらもfinallyブロック内のprint文が実行されているのが分かります。
【おすすめ記事】
【無料で使える】Pythonを勉強できる学習サイト7つ
Pythonの本・参考書の評判
Pythonを学びたい方は必見!おすすめスクールまとめ5選
プログラミング初心者が最速でPythonをマスターする方法