例外処理をしなかった場合の記述
以下例は、数字の入力を求め、その数字を出力するプログラムになります。
x = int(input("数字を入力してください:"))
print("入力された数字は、", x, " です。")
このプログラムを実行し、「a」とされた場合、プログラム作成者が期待した処理は行われず、エラーとなり処理が止まってしまいます。
数字を入力してください:a
Traceback (most recent call last):
File "try-except.py", line 1, in <module>
x=int(input("Please enter a number:"))
ValueError: invalid literal for int() with base 10: 'a'
エラーValueError
で処理が止まってしまったことが確認できます。処理が止まってしまうため、それ以降に書かれているコードが実行されません、例外処理をすることで処理を止めることなく継続することができます。
例外処理
try, except
この例では、数値以外の入力があった場合、例外処理を行った後、再び入力を求めるプログラムになります。
while True:
try:
x = int(input("数字を入力してください:"))
print("入力された数字は、", x, " です。")
break
except ValueError as e:
print(e)
print("もう一度入力してください。")
キーボードより「a」を入力した場合の動作は以下のようになります。
数字を入力してください:a
invalid literal for int() with base 10: 'a'
もう一度入力してください。
数字を入力してください:
「invalid literal for int() with base 10: ‘a’」で、エラー内容が確認できます。例外エラーが発生したため、break
部分の処理は行われず、再び入力を求める部分から処理が再開されます。
複数の except 節 を記述
while True:
try:
x = int(input("数字を入力してください:"))
v = 10 / x
print("10 を ", x " で割った答えは、", v, " です。")
break
except ValueError as e:
print("ValueErrorが発生しました。")
except ZeroDivisionError as e:
print("ZeroDivisionErrorが発生しました。")
print("もう一度入力してください。")
except
節 を複数記述することができます。このプログラムの場合、0(ゼロ)を入力された場合、ZeroDivisionError
が発生して例外処理が実行されています。
数字を入力してください:0
ZeroDivisionErrorが発生しました。
もう一度入力してください。
数字を入力してください:
この例の場合、エラーが発生した際、個別の例外処理を記述することができます。
複数の except 節 をまとめて記述
while True:
try:
x = int(input("数字を入力してください:"))
v = 10 / x
print("10 を ", x " で割った答えは、", v, " です。")
break
except ( ValueError, ZeroDivisionError ) as e:
print(e)
print("もう一度入力してください。")
except
節 にカンマ(,)区切りで複数の例外エラーを並べることができます。この例の場合、エラーが発生した際、同一の例外処理をすることになります。
except 節にシステム終了以外のすべての例外を記述
except
節に組み込み例外の基底クラスのException
を使用した場合の記述例になります。
while True:
try:
x = int(input("数字を入力してください:"))
v = 10 / x
print("10 を ", x " で割った答えは、", v, " です。")
break
except Exception as e:
print(e)
print("もう一度入力してください。")
プログラム作成者が想定していない例外をキャッチする可能性があるため、可能な限り想定した例外を記述することが望まれます。
例外が発生しなかった場合のみ実行される else 節の記述
while True:
try:
x = int(input("数字を入力してください:"))
v = 10 / x
print("10 を ", x " で割った答えは、", v, " です。")
except ( ValueError, ZeroDivisionError ) as e:
print(e)
print("もう一度入力してください。")
else:
print("エラーなく処理がおこなわれました。")
break
例外が発生しなかった場合、入力内容の結果と、else
節の処理が実行されます。
数字を入力してください:2
10 を 2 で割った答えは、 5.0 です。
エラーなく処理がおこなわれました。
try 文の終了時に必ず処理される finally 節を記述
while True:
try:
x = int(input("数字を入力してください:"))
v = 10 / x
print("10 を ", x " で割った答えは、", v, " です。")
except ( ValueError, ZeroDivisionError ) as e:
print(e) print("もう一度入力してください。")
else:
print("エラーなく処理がおこなわれました。")
break
finally:
print("終了処理")
finally
節をtry
文 に記述した場合、例外エラーの有無に関係なく、実行されます。この例の場合、例外エラーが発生しなかった場合break
部分が処理されますが、while
文のループから抜ける前に、finally
節の記述が実行されていることがわかります。
数字を入力してください:2
10 を 2 で割った答えは、 5.0 です。
エラーなく処理がおこなわれました。
終了処理
おわりに
[A8_TechAcademy065]
[Footer]