文法・環境

【python】例外処理の基本的な使い方【try、except、else、finally】

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ドキュメントで確認できます。

以下にリンクを貼っておきますので参考にしてみてください。

例外の種類_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の例外処理に関して、基本的な内容を紹介しました。

コード全体のトラブル防止につながるので、例外処理の使い方は覚えておくようにしましょう。

スポンサーリンク

-文法・環境
-