Pythonでエラーが発生するとプログラムの実行が止まってしまいます。
しかし、例外処理を入れていれば止まらずに実行し続けることができます。
この記事では例外処理について記載します。
エラー
PythonのエラーであるNameErrorとZeroDivisionErrorの例です。
print(a + 2) # NameError: name 'a' is not defined # 変数aは定義されていないので、NameErrorとなる。
for i in [5, 2, 0]:
    print(10 / i)
# 2.0
# 5.0
# ZeroDivisionError: division by zero
プログラム内で除算を使用していると、通常発生しなくても不意にZeroDivisionErrorが発生することはあり得ます。
それに備えて例外処理は実装しておく必要があります。
発生しうるエラーのバリエーションは仕様書をご覧ください。
例外処理
シンプルな例外処理はこうです。
try節でエラーが発生しても、except節側を通り、プログラムは止まることなく動き続けます。
try:
    print(10 / 0)
except:
    print('例外が発生しました。')
# 例外が発生しました。
except節
exceptキーワードの後ろに処理したいエラーを指定することができます。
try:
    print(10 / 0)
except NameError:
    print('NameErrorが発生しました。')
except ZeroDivisionError:
    print('ZeroDivisionErrorが発生しました。')
# ZeroDivisionErrorが発生しました。
発生したエラーがexcept節で処理されない場合、エラーになりプログラムが止まってしまいます。
try:
    print(10 / 0)
except NameError:
    print('NameErrorが発生しました。')
except TypeError:
    print('TypeErrorが発生しました。')
# ZeroDivisionError: division by zero
例外処理は以下のように漏れなく実装しましょう。
try:
    print(10 / 0)
except NameError:
    print('NameErrorが発生しました。')
except TypeError:
    print('TypeErrorが発生しました。')
except:
    print('例外が発生しました。')
# 例外が発生しました。
else節
try-except文にはelse節を付けることができます。
else節は、try節で例外が発生しなかったときに実行されます。
try:
    a = 10 / 2
except ZeroDivisionError:
    print('ZeroDivisionErrorが発生しました。')
except:
    print('例外が発生しました。')
else:
    print('例外が発生しませんでした。')
    print('a = ', a)
# 例外が発生しませんでした。
# a =  5.0
エラー内容を見る
except節は例外名の後に変数を指定できます。
下のサンプルコードではerr変数のことです。
その変数は例外インスタンスに紐付けられ、引数を表示できます。
try:
    import aaa
except ModuleNotFoundError as err:
    print(type(err))
    print(err)
    print(err.name)
# <class 'ModuleNotFoundError'>
# No module named 'aaa'
# aaa
例外を発生させる
例えば、開発段階で未実装部分が実行された場合にアラートを出したいことがあります。
未実装部分にNotImplementedError例外を発生させるようにすることもできます。
raise NotImplementedError
