Pythonでの例外処理
Pythonは他のプログラミング言語と比べて、例外を発生させる状況が非常に多いです。
詳しく見ていきましょう。リストがあるとします:
lst = [1, 2, 3]
存在しないリストの要素にアクセスしてみましょう:
print(lts[4])
コードを実行すると、エラー(例外)が表示されます:
IndexError: list index out of range
例外を表示せずに処理を継続したい場合は、try-except構文を使用して例外を「キャッチ」する必要があります。
この構文は次のような形をしています:
try:
# 例外を引き起こす可能性のあるコード
except:
# エラーの処理
tryブロックには、例外を含む可能性のあるコードを配置します。
このコードの実行中に例外が発生した場合、コードの実行は停止せず、exceptブロックのコードに移行します。
このブロックでは、発生したエラーの本質を可能な限り正確に説明するメッセージを表示するコードを記述する必要があります。
tryブロックの実行中に何も例外が発生しなかった場合、実用的なコードは単に実行され、exceptブロックのコードは実行されません。
存在しないリスト要素へのアクセスで発生する例外をキャッチしてみましょう。
そのためには、潜在的なエラーを含むコードをtryブロックに配置します。
そしてexceptブロックで、コンソールにメッセージ'error: elem is not exist'を表示するように指定します:
lst = [1, 2, 3]
try:
print(lst[4])
except:
print('error: elem is not exist')
コードを実行すると、次のように表示されます:
'error: elem is not exist'
try-except構文を学んだ後は、あなたが書くコードのスタイルが変わるはずです。
これからは、例外が発生する可能性のあるすべての箇所をtryで囲み、exceptブロックでその例外への対応を記述する必要があります。
ユーザーに2つの数字を入力させてください。一方をもう一方で割ります。ゼロ除算の例外状況をキャッチしてください。
ユーザーに数字を入力させてください。その数字の平方根を求めます。負の数からの根の抽出で発生する例外状況をキャッチしてください。
リストが与えられます。ユーザーに整数を入力させてください。ユーザーが入力した番号のリスト要素を取得します。ユーザーがリストの範囲外の数字を入力した場合に発生する例外状況をキャッチしてください。
次のコードが与えられます:
num = '5'
res = num + 2
print(res)
このコードの何が問題でしょうか?その欠点を修正してください。
次のコードが与えられます:
lst = [1, 2, 3, 4]
def getElem(iter):
print(iter[4])
getElem(lst)
このコードの何が問題でしょうか?その欠点を修正してください。