Pythonでエラーが発生してもプログラムを止めないで続ける方法(tryやexceptの使用による例外処理)【Introduction of Python for beginners】

Pythonでエラーが発生してもプログラムを止めないで続ける方法(tryやexceptの使用による例外処理)【Introduction of Python for beginners】

この記事では、Pythonプログラムでエラーが発生しても処理を中断せずに継続させる方法について詳しく説明します。エラーや例外によるプログラムの予期せぬ終了を防ぐために、例外処理を使用します。例外処理は、try、except、else、finallyなどのキーワードを組み合わせて利用されます。これらの概念はPythonプログラムの作成において非常に重要であり、この記事を通じて理解を深めていただければと考えています。

Pythonでのエラー発生時のプログラムの動き

Pythonプログラムでエラーが発生すると、エラーが適切に処理されていない場合、プログラムは異常終了してしまいます。言い換えれば、エラーが発生すると、プログラムの実行が途中で中断されるということです。当サイトではさまざまなエラータイプについて説明しています。例えば、0で数値を割ろうとすると発生するZeroDivisionErrorや、リストやタプルのインデックスが無効な場合に発生するIndexErrorなど、さまざまなエラーがあります。

エラーが発生すると、プログラムの実行は中断され、その後のコードは実行されません。しかし、本番環境で稼働するプログラムがエラーが発生したたびに中断されるのは望ましくありません。Pythonには、プログラムがエラー(または例外)を検出しても、処理を中断せずにプログラムを続行させるための例外処理と呼ばれる方法があります。

Pythonでの例外処理

例外とは何か?

Pythonのエラーは、大きく分けて構文エラーと例外の2つのカテゴリに分けることができます。

構文エラーは、Pythonがプログラムの構文解析中に検出するエラーです。言い換えると、プログラムがPythonの構文(記述のルール)に合致しない場合に発生するエラーです。例外とは、プログラムの構文(文法)が正しい場合でも、実行中に発生するエラーのことです。例外が発生すると、通常のプログラムの実行が中断されます。

例外処理とは何か?


例外処理は、プログラムの処理を中断させずに、例外が発生してもプログラムを継続させるための手法です。プログラムを開発する際に、エラーが発生する可能性のある箇所に例外処理を組み込み、エラーが発生してもプログラムの実行が停止しないようにすることが非常に重要です。

例外処理の実装には、tryexceptなどのキーワードが使用され、これらを使ってエラーを検出し、エラーが発生した場合の処理を指定します。簡単に言えば、例外処理は「プログラム実行中にエラーが発生した場合、プログラムを停止させずに、どのような処理を行うかを定義する方法」です。

Pythonでの例外処理の記述

tryとexcept

例外処理において、tryexceptを使用して例外を捉えて処理できます。

tryブロックには、例外が発生する可能性のあるコードを記述します。一方、exceptブロックには、例外が発生した場合に実行する処理を記述します。

例えば、ある数値をゼロで割ろうとすると、ZeroDivisionErrorという例外が発生します。例外処理を加えると次のようになります。


def divide(x):
    try:
        result = 57 / x
        print(result)
    except ZeroDivisionError:
        print("ゼロで割ることはできません")

divide(2)
divide(0)
divide(3)
# 28.5
# ゼロで割ることはできません
# 19.0

tryブロック内でZeroDivisionErrorというエラーが発生すると、制御はexceptブロックに移り、その後のプログラムが続行されることがわかります。exceptの後には、捕捉するエラーの名前を指定する必要があります。

複数の例外がある場合

一つの例外だけでなく、複数の異なる例外が発生する可能性があることはよくあります。そのため、複数の例外をキャッチするために、以下のように複数のexceptブロックを記述できます。

try:
print(5/x)
except ZeroDivisionError:
print("ZeroDivisionError")
except TypeError:
print("TypeError")

エラーメッセージを表示させる

この方法を使用すると、例外が発生した際に、その例外に関する情報が変数に保存されます。例外オブジェクトには、エラーメッセージなどの詳細情報が含まれているため、エラーの原因を特定しやすくなります。


def divide(x):
    try:
        print(5/x)
    except ZeroDivisionError as e:
        print(e)

else

else節に含まれるコードは、try節内で例外が発生しなかった場合に実行されます。要するに、try節内で例外が捕捉されず、正常に処理が終了した際に実行されると言えます。そのため、try節で例外が発生し、except節が処理されると、else節はスキップされる点に留意してください。


def divide(x):
    try:
        x = 5/x
    except Exception as e:
        print(e)
    else:
        print(x)

finally

finally節に含まれるコードは、例外の発生の有無に関係なく、必ず最後に実行されます。言い換えれば、例外が発生した場合でも、発生しなかった場合でも、finally節の処理が確実に行われるという点が特徴です。そのため、else節が例外の場合に実行されないのと異なり、finally節は常に実行されるという重要な違いがあります。

def divide(x):
    try:
        x = 5/x
    except Exception as e:
        print(e)
    finally:
        print(x)
にほんブログ村 教育ブログへ
にほんブログ村
インターネット・コンピュータランキング
インターネット・コンピュータランキング
ブログ王ランキングに参加中!
PC関連ランキング
くる天 人気ブログランキング

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です