第7回:Pythonプログラミング入門 例外処理 try-except
前回の記事で例外の話がありましたので、例外について紹介していきます。
第6回:Pythonプログラミング入門 必須引数とオプション引数 - 週末SEのメモブログ
例外、つまりエラーの発生する理由ですが、ユーザーから意図していない値を関数に渡されたり、(基盤の問題にもなりますが)件数やクエリの発行数が多すぎてガバナ制限に抵触したりと様々なものがあります。
そのうちプログラムを書いていて最初に注意しなければならないのが、ユーザーから意図しない値を入力(input関数)された際の例外処理です。
よくある例:0で割ってしまう
算数の話ですが、0で割ることはできませんよね?同じことをPythonに実行させると例外が発生します。サンプルコードは下記のようなものです。
x = input("input a number:")
y = input("input another:")
x = int(x)
y = int(y)
print(x / y)
最初の入力で 5 、2回目の入力で 0 を入力した場合、
ZeroDivisionError: integer division or modulo by zero
※エラーメッセージはバージョンによって若干異なることがあります
が発生します。
例外の発生に対して何の対応もしていないとこのエラーメッセージがユーザーの画面に出てしまいます。普段アプリを使っていてこんなメッセージを出されてフリーズしたら堪りませんよね?
そこで、例外処理を行う必要があります。
Pythonの例外処理は try と except のキーワードを利用します。
javaの経験がある方はtry-catchの代わりと考えてください。
では、実際にどうハンドリングするかですが、下記のように例外をハンドリングします。
x = input("input a number:")
y = input("input another:")
x = int(x)
y = int(y)
try:
print(x / y)
except ZeroDivisionError:
print("2個目の数字に0は使用できません")
このようにプログラムすることで、ユーザーがもし2個目の数字に 0 を入力してもプログラムは中断せずに済みます。上記の例では、2個目の数字に0以外の数字を入力した場合は、tryのブロック内に書かれた処理のみ実行され、exceptブロックの処理は実行されません。
数字として入力してほしいところで文字列を入力されてしまうなど、ユーザーのinputに依存する処理では、他にも色々な例外発生のリスクがあります。
それぞれの例外に対して、適切に対応していく必要があります。
補足ですが、Pythonの各例外はオブジェクトなので、プログラムで利用できます。
公式の例外一覧を参照するようにしましょう。