はじめに
こんにちは。
文系出身のシステムエンジニア1年生です。
(いつの間にか入社2年目になってしまいましたが、気持ちが1年目なので1年生です。)
さて、前回の記事では「エラーには2種類ある」という話をしていました。
プログラミング1年生のPythonメモ①~エラーの種類~
間違ったプログラムを動かそうすると発生するエラー。
これらは大きく2つの種類に分けることが出来ます。
一つはそもそも動かない(動かすことが出来ない)もの。
もう一つは動くけれど途中で止まってしまうものです。
一般的に前者はエラー(構文エラー)、後者は例外と呼ばれます。
今回は後者である「例外」について取り上げてみようと思います。
例外とは
構文ミスなどによって、そもそも実行が出来ない構文エラー(Syntax Error)に対し、
動かすことは出来るが、途中で止まってしまうエラーのことを例外(exception)と呼びます。
処理が途中で止まってしまう原因としては、
- ユーザの入力値が間違っている
- 関数に指定された引数が渡されていない
- ネットワーク等の環境によって処理が実行できない
…などが想定されます。
def add_5 (num):
add_num = num + 5
return add_num
例えば、もしこのような関数の引数(ここではnumのこと)に
数値の“10”ではなく、文字列(漢数字)の“十”を渡してしまうと
文字列 + 数値
は当然実行できないためエラーとなります。
構文自体は合っているのに、引数が想定と違う形で入力されてしまうと、
この関数の処理はここで停止してしまうのです。
こういったタイプのエラーを例外といいます。
そして、このような予期せぬエラー(例外)に出会ったとき、
そこでプログラムがが止まったままになってしまわないよう、
あらかじめコードを書いておいて対処してしまおう!というのが、次に紹介する例外処理です。
例外処理
例外処理とは、実行しているプログラムが何らかの理由でエラーとなった場合、
そこでの処理を一度中断して、別の箇所に記載された処理を行うことです。
これには様々な書き方があるようですが、
今回はひとまず、主な方法を2つだけ紹介したいと思います。(1年生ですし)
try-except講文
例外処理の基本的な書き方の1つがtry-except講文です。
def add_5 (num):
try:
add_num = num + 5 #ここでエラーが起きれば…
print(f"add_num is {add_num}")
return add_num
except: #exceptブロックの処理へ移動!
print("Error!!!") #"Error!!!"と表示させる
例えば上記のプログラムなら、最初は順番通りtryブロック
の処理を行いますが、
エラーが発生した場合はすぐにexceptブロック
の処理へ移動します。
こうすることで、プログラムが途中で動かなくなってしまって終わり…という事態を回避できます。
if文
if文を使うことで、エラーを事前に回避するという方法もあります。
def add_5 (num):
if not instance(num, int): #"もし整数じゃなかったら…"
print ("入力値が無効です…") #コレを表示!
return False
add_num = num + 5 #本来やりたい処理↓↓↓
print(f"add_num is {add_num}")
return add_num
ここではisinstance関数※1を使って、numに入る値が整数かどうかを判断しています。
もし整数以外の値が入れば、“入力値が無効です…”と表示され、
整数であれば、本来の足し算処理が行われます。
このようにif文を使って、事前に入力値をチェックしてエラーを回避するという書き方もあります。
※1 isinstance関数…第1引数に取った変数が、第2引数のオブジェクトかを判定する関数。ここではnumが整数であるかどうかを判断している。
さいごに
今回は「例外」という種類のエラーと、それに対する「例外処理」について簡単にまとめてみました。
特に例外処理についてはまだまだ多くの書き方があり、複雑な処理を実行しようとすればするほど、関数や構文の組み合わせが必要になってくるようです。
とはいえひとまず、「例外?例外処理?とはなんぞや…」をざっくり知るにはこのくらいで…
ありがとうございました!