Pythonの例外処理


はじめに

プログラミンを勉強し始めて3カ月ほどたったのでそろそろアウトプットをしていこうと思い
今日からQiitaに記事を書き始めることにしました。

また、自分が今までQiitaの記事に何回もお世話になったのも書こうと思った理由の内の一つです。
初投稿なので温かい目で見て下さい。

今回は、例外処理についてです。(使用する言語はPython)

目次

  1. 例外処理とは

  2. Pythonの例外処理
    2-1. 基本的な例外処理の書き方 try except
    2-2. 例外をキャッチしても処理をスルーするpass
    2-3. 例外が発生しなかった場合に処理をするelse
    2-4. 例外の発生に関わらずに処理をするfinally

  3. おわりに

1.例外処理とは

まず最初に例外処理とは以下のようなことです。

例外処理とは、プログラムの実行の継続を妨げる異常な事象(「例外」と呼ばれる)が
発生した際に、その内容に応じて実行される処理のこと。(IT用語辞典から引用)

下記は例外処理の書き方です。(Python)


try:
    # 何らかの処理
except:
    # エラーが起きた時に実行される処理

例えば、二つの数字を使った割り算では0で数字を割った時にエラーが起きてしまいます。


print(1 / 0)
# 上記の処理ではエラーが発生してしまう

そんな時に、例外処理を使うことによってエラーが出たとしてもそのまま処理を実行することができ、そのエラーの内容をキャッチすることが出来ます。

try:
    print(1 / 0)
except ZeroDivisionError:  # 0で割るとZeroDivisionErrorが発生する
    print('0による除算')

このように、エラーが起きた時に処理を実行し続けたい時に使います。

2.Pythonの例外処理

先ほどから、例外処理を書いていますがここまでの記述はすべてPythonで書かれています。
これから、さらにPythonについての例外処理を深堀していきたいと思います。

2-1. 基本的な例外処理の書き方 try except
基本的には、Pythonの例外処理の書き方は下記のものになります。

try:
    # 何かの処理
except:
    # エラーが起きた時に実行される処理

上記の状態ではすべての例外処理をキャッチしている状態になっています。なので、exceptの後に発生するエラー(例外の型)を書いておいてそのエラーに対応される処理を書くべきです。

# 例
# 0で割ることによる除算に対応する処理
try:
    print(1 / 0)
except ZeroDivisionError as e:
    print(e)
# division by zero

また、上記のようにexcept 例外の型 as 変数名とすることで変数の中に例外オブジェクトが格納されます。

2-2. 例外をキャッチしても処理をスルーするpass
passは、例外が発生してそれをキャッチしても処理をそのままスルーします。

try:
    print('hello' / 'a')
except TypeError:
    pass

無責任にpassしてくるなんてけしからんですな(笑)

2-3. 例外が発生しなかった場合に処理をするelse
elseはtryの中で例外処理が発生しなかった場合に実行される処理を書きます。

try:
    print(2 / 2)
except TypeError as e:
    print('TypeError:', e)
else:
    print('処理に成功しました')

# 1
# 処理に成功しました

上記のような処理になります。

2-4. 例外の発生に関わらずに処理をするfinally
finallyは例外処理が起きた場合にも起きなかった場合にも処理を実行してくれる

try:
    print(2 / 1)
except:
    print('Error')
else:
    print('処理に成功しました')
finally:
    print('ここで終了')

# 2
# 処理に成功しました
# ここで終了

このように、処理が成功した場合にelseの次にfinallyの処理が実行されます。
例外処理が起きた場合には、elseの中の処理が実行されずにfinallyの処理が実行されます。

おわりに

いかがだったでしょうか、初心者の方たちは最初は例外処理を使う機会はそこまでないと思いますがのちのち例外処理を使う場面が増えていくので簡単な処理だけでも覚えておきましょう。
また、さらに深く知りたい方などは公式のドキュメントを見ることをオススメします。

参考

公式ドキュメント
Pythonの例外処理(try, except, else, finally)