Python

Pythonで例外処理(エラーハンドリング)をするtry文の様々な使い方

By 2021年3月15日No Comments

この記事ではPythonの例外処理をする方法について説明します。Pythonで例外処理するにはtry文を使用します。

例外とはプログラムのエラーのことで例外処理をするとエラーに対しての処理や、その原因や解決方法をエラーメッセージを表示したりしてプログラムを終了できます。例外処理はエラーハンドリングとも言われます。

Pythonで例外処理(エラーハンドリング)をできるtry-exceptを使う方法

try-except文を使って例外処理します。tryで例外が発生すると、その行以降のtryのコードの実行は中断してexceptが実行がされる事になります。try文には例外を発生させる可能性があるコードを記述していきます。そして、exceptでは例外が発生した場合のその例外に対する処理を記述します。構文は下記になります。

try:

    例外が発生するかもしれない処理

except:

    例外が発生した場合の処理

def divide(a, b):
    try:
        print(a / b)
    except ZeroDivisionError:
        print("ゼロになりました。")
divide(1, 1)
divide(1, 0)

結果:

1.0

ゼロになりました。

このようにtryに例外を発生させるかもしれないコードを記述してexceptで例外に対しての処理をしてます。exceptは何個でも複数の例外に対して処理をする事ができます。

def divide(a, b):
    try:
        print(a / b)
    except ZeroDivisionError:
        print("ゼロになりました。")
    except TypeError:
        print("整数が入力されてません。")

divide(1, 1)
divide(1, 0)
divide(1, "あ")

結果:

1.0

ゼロになりました。

整数が入力されてません。

タプル( )を使うと1つのexpectで複数の例外をまとめることができます。

def divide(a, b):
    try:
        print(a / b)
    except (ZeroDivisionError, TypeError):
        print("例外")
divide(1, 1)
divide(1, 0)
divide('あ', 'い')

結果:

1.0
例外
例外

タプル( )でエラー内容を一つのexceptにまとめました。エラーメッセージを出力してエラーの内容を確認するだけなどであればこのような使い方もできます。

exceptで指定した例外が発生しなかったときにtry文内で実行するコードをelse文で記述できます。ただし例外が発生してexceptの処理が実行された場合はelse文の処理は実行されません。else文はexceptよりも後ろに記述する必要があります。構文は下記になります。

try:

    例外が発生するかもしれない処理

except:

    例外が発生した場合の処理

else:

    例外が発生しなかった場合の処理

def divide(a, b):
    try:
        print(a / b)
    except (ZeroDivisionError, TypeError):
        print("例外")
    else:
        print("処理が正常にできました。")
divide(1, 1)

結果:

1.0

処理が正常にできました。

exceptの例外が発生しなかったのでelse文が実行されました。

さらに例外が発生したかどうかに関わらずfinallyを指定するとtry文を抜ける前にコードを実行することができます。finallyはexceptやelseの後ろの一番最後に記述します。

def divide(a, b):
    try:
        print(a / b)
    except (ZeroDivisionError, TypeError):
        print("例外")
    else:
        print("処理が正常にできました。")
    finally:
        print("終了します。")
divide(1, 1)

結果:

1.0

処理が正常にできました。

終了します。

finallyを使うことで終了時の処理を指定することができました。このようにtry文を使うと様々な処理を指定して例外処理をすることができました。

意図的に例外を発生させるraiseの使い方

Pythonには意図的に例外を発生させるraiseという機能があります。自作した関数などで例外を発生させたい場合にraiseをtry文内で使います。raiseの構文は下記になります。

raise 例外クラス(メッセージ):

ValueErrorなどの例外クラスの引数には例外が発生した原因などをメッセージとして文字列を指定します。ただし、この引数は省略することもできます。

try:
    raise ValueError()
except ValueError:
    print("エラー")

結果:

エラー

try文でraiseを使用しValueErrorクラスの例外を発生させています。例外が発生したのでexceptの処理が実行されてエラーメッセージが表示されて例外処理されています。raiseはエラーを意図して発生させていることが第三者にもわかります。

ValueErrorなどのエラーの変わりにExceptionを指定して例外処理をする方法

ValueErrorのようなエラーに関するクラスは全てExceptionクラスを継承されてできたクラスなのでExceptionは例外クラスの元となるクラスの機能を継承して新しいクラスを作ることができます。

try:
    raise Exception()
except Exception:
    print("エラー")

結果:

エラー

Exceptionでもraiseを使って例外クラスのエラーをexcept文が実行されました。Exceptionは様々な例外クラスの例外処理に対応することができます。

まとめ

今回はPythonのtry文で例外処理をする様々な方法についてでした。try文ではエラーがでた場合でもプログラムを終了せず例外処理を指定することができました。

raiseはエラーが発生したときだけでなく、正常なプログラムの処理のひとつとして使用されます。これらの例外処理をする事で、どのようなエラーが出るかエラーメッセージを表示したりしてプログラムを分かりやすくすることができます。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL