Pythonの例外処理に関して、基本的な内容を紹介します。
例外処理を行うことで、処理中にエラーが発生した場合でも、途中終了せずに処理を継続することができます。
本記事では、例外処理に関する下記の内容を紹介しています。
この記事で分かること
■例外処理の基本
- 例外が発生した場合の処理【try except】
- 全ての例外を捕捉(catch)する方法【Exception】
- 例外オブジェクトを変数に格納する方法
■正常終了した場合の処理【try else】
■常に実行する処理【try finally】
スポンサーリンク
Pythonの例外処理の基本的な使い方【try except】
はじめに、pythonの例外処理の基本的な内容について紹介します。
pythonの"例外"とは、プログラムの処理を妨げる様々な問題(エラー)を指します。
通常、"例外"が発生するとプログラムはその時点で中断されてしまいますが、
事前に"例外"発生時の処置を記述しておくことで、プログラムを中断させずに処理を継続させることができます。
このように発生した例外を捕まえて、その例外に対応することを「例外を捕捉(catch)する」とも表現します。
たとえば、以下のサンプルコードの場合、0で割り算できないことを示す「ZeroDivisionError」が発生し、処理が中断されてしまいます。
### 例外「ZeroDivisionError」
num = 0
result = 100 / num
print(result)
# ZeroDivisionError : division by zero
このような例外をあらかじめ想定し、例外発生時の処理を記述することで、
トラブルを事前に防ぐことができます。
スポンサーリンク
例外処理の基本形 "try except" の使い方
例外処理は、try文で記述します。
try節には、例外が発生する可能性のある処理を記述し、
except節には、例外が発生した場合の処置を記述します。
例外処理の書き方
try :
例外が発生する可能性のある処理
except 例外の種類 :
例外に対応する処理
以下、例外処理のサンプルコードです。
except節には、ZeroDivisionError発生時の処理を記述しています。
例外が発生しない場合は、except節の中の処理は実行されません。
### 例外処理 try except の例【例外が発生しなかった場合】
num = 2
try :
result = 100 / num
print(result)
except ZeroDivisionError :
print('0以外の数値を入力してください。')
# 50.0
例外が発生した場合は、except節の中の処理が実行されます。エラーは発生しません。
### 例外処理 try except の例【例外が発生した場合】
num = 0
try :
result = 100 / num
print(result)
except ZeroDivisionError :
print('0以外の数値を入力してください。')
# 0以外の数値を入力してください。
全ての例外を捕捉(catch)する方法【Exception】
例外の種類に " Exception " を指定することで、すべての例外を捕捉できます。
例外処理の書き方
try :
例外が発生する可能性のある処理
except Exception :
例外に対応する処理
以下、例外の種類に、" Exception "を指定したサンプルコードです。
### 例外の種類 Exception のサンプルコード
num = 0
try :
result = 100 / num
print(result)
except Exception:
print('例外が発生しました')
# 例外が発生しました
便利な " Exception "ですが、どんな例外が発生しても処理が中断されなくなるため、
逆に、想定していない例外が発生した場合は、コード全体のバグに繋がってしまいます。
可能な限り、" 例外の種類 "には、想定される例外を指定するようにしましょう。
なお、例外の一覧については、pythonドキュメントで確認できます。
以下にリンクを貼っておきますので参考にしてみてください。
例外オブジェクトを変数に格納
" except 例外の種類 as 変数名 : " と記述することで、変数に例外オブジェクトを格納できます。
例外処理の書き方
try :
例外が発生する可能性のある処理
except 例外の種類 as 変数名:
例外に対応する処理
以下、例外オブジェクトを変数に格納するサンプルコードです。
"ZeroDivisionError"の例外が発生した場合に、例外オブジェクトを変数に格納し、printで表示しています。
### 例外オブジェクトを変数に格納
num = 0
try :
result = 100 / num
print(result)
except ZeroDivisionError as e:
print('0以外の数値を入力してください。')
print(type(e))
print(e)
# 0以外の数値を入力してください。
# <class 'ZeroDivisionError'>
# division by zero
別のサンプルコードも紹介します。
以下は、ユーザーからキーボード入力を受け付け、除算するサンプルコードです。
全ての例外を捕捉できる " Exceprion " を使用し、例外が発生した場合は例外オブジェクトを表示し、数値の再入力を受け付けます。
### 例外オブジェクトを変数に格納
while True:
try:
num = input('0以外の数値を入力してください: ')
result = 100 / int(num)
print(result)
except Exception as e:
print(e)
print('例外が発生しました。0以外の数値を再入力してください: ')
continue
# 0以外の数値を入力してください: 1
# 100.0
# 0以外の数値を入力してください: 0
# division by zero
# 例外が発生しました。0以外の数値を再入力してください:
# 0以外の数値を入力してください: 10
# 10.0
スポンサーリンク
try else:正常終了した場合の処理
try文にelse節を加えることで、正常終了した場合の処置を記述できます。
例外処理の書き方
try :
例外が発生する可能性のある処理
except 例外の種類 :
例外に対応する処理
else :
正常終了した場合の処理
以下、else節を加え、正常終了した場合の処理を追加したサンプルコードです。
例外が発生しない場合は、except節の処理は実行されません。
### else節のサンプルコード【例外が発生しない場合】
num = 1
try :
result = 100 / num
except Exception as e:
print(e)
else :
print('正常に終了しました。')
print(result)
# 正常に終了しました。
# 100.0
例外が発生した場合は、else節の処理は実行されません。
### else節のサンプルコード【例外が発生した場合】
num = 0
try :
result = 100 / num
except Exception as e:
print(e)
else :
print('正常に終了しました。')
print(result)
# division by zero
スポンサーリンク
try finally : 常に実行する処理
try文にfinally節を加えることで、正常終了した場合でも、例外が発生した場合でも、常に実行される処置を記述できます。
例外処理の書き方
try :
例外が発生する可能性のある処理
except 例外の種類 :
例外に対応する処理
else :
正常終了した場合の処理
finally :
常に実行する処理
以下、finally節を加えたサンプルコードです。
正常終了した場合でも、例外が発生した場合でも、常にfinally節の処理が実行されます。
### finally節のサンプルコード
num = 1
try :
result = 100 / num
except Exception as e:
print(e)
else :
print('正常に終了しました。')
print(result)
finally :
print('計算を終了します。')
# 正常に終了しました。
# 100.0
# 計算を終了します。
スポンサーリンク
まとめ
pythonの例外処理に関して、基本的な内容を紹介しました。
コード全体のトラブル防止につながるので、例外処理の使い方は覚えておくようにしましょう。
スポンサーリンク