プログラム自体は正しいのだけど、実際に実行すると、その実行中にエラーが発生することがあります。
例えば、次のような場合です。
・接続先のサーバーがダウンしていた
・ユーザーが想定外の値を入力した
通常、このようなエラーが発生した場合、プログラムが終わってしますのですが、エラーが発生した際にどのような処理をするかあらかじめ決めておくことができます。
これを例外処理といいます。
今回は、Pythonの例外処理について解説します。
例外の具体例
例えば、次のようなコードがあります。
a = float(input()) b = float(input()) c = a/b print(c)
実行時に値を2つ入力すると、その割り算の結果を表示するという簡単なプログラムです。
例えば、値に「3」と「2」を入力した場合、問題は発生せずに「1.5」と割り算の答えを表示します。
しかし、値に「3」と「0」を入力した場合、「0」で割ることはできないので「ZeroDivisionError」というエラーが発生します。
このように、プログラムの実行中に状況によって発生するエラーのことを 例外 (Exception) といいます。
例外処理の実装
Pythonの例外処理では「Try」と「except」という構文を利用します。
「Try」のブロックには例外が発生する可能性のあるコードを記述します。
「except」のブロックには例外が発生した場合の処理を記述します。
先程の例に当てはめると次のように実装することになります。
try: a = float(input()) b = float(input()) c = a/b print(c) except: print('エラーが発生しました')
もし、「Try」のブロック内で例外が発生した場合は、「except」のブロック内の「 print(‘エラーが発生しました’)」という処理が実行されます。
先程と同様に、値に「3」と「0」を入力した場合でもエラーが発生せずに、「エラーが発生しました」というメッセージが表示されるようになりました。
例外の種類
例外の種類によって処理を分けることもできます。
この場合「except」の後ろに例外の種類を記述します。
例えば、「ZeroDivisionError」の例外が発生した場合にだけ、「0で割ることはできません」というメッセージを表示するには次のように記述します。
try: a = float(input()) b = float(input()) c = a/b print(c) except ZeroDivisionError: print('0で割ることはできません') except : print('エラーが発生しました')
値に「3」と「0」を入力した場合は、「0で割ることはできません」というメッセージが表示されるようになりました。
また、値に「A」など、数字でない値を入力した場合は「エラーが発生しました」というメッセージが表示されます。
例外のスルー
個人的に作成しているツールなどでは、わざわざ例外の処理を実装しなくても問題ないことも多いです。
でも、エラーでプログラムが途中で止まってしまうと効率が悪くなります。
そのような場合には「pass」文を使用します。
「pass」文を使用すると、例外をキャッチしても特に何も処理を行わずにスルーすることができます。
具体的には次のように記述します。
try: a = float(input()) b = float(input()) c = a/b print(c) except : pass
こうすることで、どんな例外が発生してもないも処理をしないプログラムとなります。
練習問題
上記のコードをカスタマイズし、例外の種類によって、以下のようにメッセージが表示されるように変更してください。
・「A」など数値でない値を入力した場合は、「入力した値が正しくありません」と表示する
・その他の例外が発生した場合は、「エラーが発生しました」と表示する