Pythonの例外処理とは?try・except・else・finallyの使い方【処理を続行する方法】

プログラミングの学習を進めるうえでエラー対策は避けられません。エラーに対応することで勉強にはなりますが、その都度手を止められるのは困りものです。

そこで、今回はエラーが出てもプログラムを続行してくれるtry・except文について解説します。

その文と合わせて使われるelse・finallyについても書いているので気になる方はぜひ最後までご覧ください。

例外処理とは?

例外処理とはエラーが出たときに行う処理のことです。以下のプログラムではどんなエラーが予想できるでしょうか?

ユーザーに入力してもらった数値で5を割っています。2を入力しているので「5÷2」で2.5が出力されていますね。

しかし、0を入力したらエラーになります。0で割ることはできないので「ZeroDivisionError: division by zero」を検出してプログラムは止まってしまいます。

エラーを検出した段階でプログラムは止まってしまうので「答え:」の文が出力されていません。

このように途中で異常終了してしまうのを回避するために使うのがtry・except文です。

try・except文

特定の例外を検出

  • try文:エラーになるかもしれない処理
  • except文:検出したいエラーとそのときの対処法

これでエラーが出たときに何がダメだったのかが分かりやすくなりましたね。

この処理は、0を入力したときだけの対処です。間違って文字を入力すると、以下のように異常終了してしまいます。

今度は「ValueError」が出てきましたね。「入力された値が文字になっているので間違っていますよ」と言っています。

このように、想定できるエラーは複数あります。そういった場合は、except文を追加することで対応できます。

複数の例外を検出

  • try文:エラーになるかもしれない処理
  • except文1つ目:検出したいエラーとそのときの対処法
  • except文2つ目:検出したいエラーとそのときの対処法
  • except文は3個でも4個でも追加できる

この例では、「k」と入力しているので「ValueError」になりますが、2つ目のexcept文が実行されていいるのが分かります。

このようにエラーごとに処理を分けることはできますが、すべてのエラーを予期できるわけではありません。

どんなエラーにも対応できるように「Exseption」があります。

全ての例外を検出

  • try文:エラーになるかもしれない処理
  • except文:Exceptionをわたす

「Exception」を使うとすべてのエラーに対応してくれます。出力結果からも分かるように、文字を入力した場合でも0を入力した場合でもexcept文が実行されていることが分かります。

ですが、このままではどんなエラーが出たか分かりません。そこで「as」を使うとエラーの種類を見ることができます。

「Exception as e」とすることで検出したエラーをe変数に格納しています。それをprint関数で出力しています。

英語で「as」とは「~として」という意味があるので「Exception as e」は「Exception(エラー)をeとして扱う」という意味になります。
他にも「as」はファイル操作やモジュールのインポートでも使われるので要チェックです。

else・finally文

else文

tyr文の処理が正常に終了したときに実行される文です。もし、except文の処理が実行された場合はelse文の処理は無視されます。

正しく数値を入力したときはelse文の成功まで出力されていますが、0を入力した場合はexcept文が実行されるだけでelse文は実行されません。

finally文

tyr・except文の処理が終了したときに実行される文です。except文の処理が実行されてもされていなくてもfinally文の処理は実行されます。

処理が正常に終わってもエラーを検出してもfinally文の処理は実行されています。

処理をリトライさせる

例外処理にtry・except文を使うことは解説しましたが、これだけだと例外を処理して終了してしまいます。

そうではなく正常に終了するまで続けたい場合、つまり処理をリトライさせたい場合のプログラムを考えてみましょう。

for文でのリトライ

  • for文でリトライする回数を決める
  • try・except文に処理を書く
  • else文でbreakする
    • 正常に終了したらfor文を抜けるため

range(3)としているので3回まではリトライしてくれます。この回数は自由に変更できます。

while文でのリトライ

リトライの回数を無制限にしたい場合はwhile文も使えます。

  • 「while True」で始める
  • else文にbreakを渡す

「while True」にしているので常にループ処理が実行されます。つまり、正常に終了する以外にループを脱することはできないということです。

まとめ

  • try文:エラーになりそうな処理を書く
  • except文:エラーの検出とそのときの処理
  • else文:正常終了したときの処理
  • finally文:終了したときの処理
関連記事

プログラミング言語のなかでも人気の高いPythonを学習する教材を紹介します。 最近ではプログラミングスククールがたくさんあるので迷うと思います。 ですが、まずは無料教材から始めてみましょう。苦労した分だけ力がつきます。 […]