python 例外処理を行う

python 例外処理を行う

pythonで、例外処理はtry-catchではなくtry-exceptで行います。pythonのバージョンは3.8.5を使用してます。

環境

  • OS windows10 pro 64bit
  • python 3.8.5

例外処理

try-exceptを利用して、例外処理を行います。

エラーを発生させて、例外を発生させてみます。

try:
    print(1 / 0)
except:
    print('例外発生')

# 例外発生

0で割り算をしようとしたのでエラーが発生して、exceptブロックの処理が実行されます。

発生するエラーの種類ごとに「except」を切り分けて、実行することもできます。

try:
    print(1 / 0)

except ZeroDivisionError:
    print('ZeroDivisionError')
    # ZeroDivisionError

except:
    print('例外発生')

asを使用すれば、エラーメッセージも取得することができます。

try:
    print(1 / 0)

except ZeroDivisionError as e:
    print(e)
    # division by zero

except:
    print('例外発生')

独自の例外

raiseを使用すると独自の例外を発生させることができます。

Exceptionは、全ての例外の基底クラスとなります。

try:
    raise Exception('オリジナル exception')

except ZeroDivisionError as e:
    print(e)    

except Exception as e:
    print(e)
    # オリジナル exception

複数種類の例外処理

以下のように複数の例外をまとめることも可能です。

def hoge(x, y):
    try:
        print(x / y)
    except (ZeroDivisionError, TypeError) as e:
        print(e)

hoge(1, 0)
# division by zero

hoge('1', '2')
# unsupported operand type(s) for /: 'str' and 'str'

例外が発生しなかった場合のみ実行

else句を使用すると、例外が発生しなかった場合のみの処理を記述することができます。

def hoge(x, y):
    try:
        print(x / y)
    except (ZeroDivisionError, TypeError) as e:
        print(e)
    else:
        print("正常終了時のみ実行")

hoge(1, 2)
# 0.5
# 正常終了時のみ実行

hoge('1', '2')
# unsupported operand type(s) for /: 'str' and 'str'

必ず実行されるfinally

finally句を使用すれば、例外が発生してもしなくても必ず実行される処理を記述することが可能です。

def hoge(x, y):
    try:
        print(x / y)
    except (ZeroDivisionError, TypeError) as e:
        print(e)
    else:
        print("正常終了時のみ実行")
    finally:
        print('必ず実行')

hoge(1, 2)
# 0.5
# 正常終了時のみ実行
# 必ず実行

hoge('1', '2')
# unsupported operand type(s) for /: 'str' and 'str'
# 必ず実行