文法・環境

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

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

スポンサーリンク

-文法・環境
-