Python入門:try-exceptでエラーを適切に処理する方法

プログラムを書いていると、ユーザーの入力ミスや予期せぬデータの値によって、プログラムが突然停止(クラッシュ)してしまうことがあります。例えば、ゼロによる割り算は数学的に定義されていないため、PythonではZeroDivisionErrorというエラーが発生し、プログラムはそこで実行を停止します。

このような予期せぬエラーからプログラムを守るための仕組みが例外処理です。この記事では、tryexceptという2つのキーワードを使って、エラーを安全に処理する方法を解説します。


目次

tryexceptでエラーを捕まえる

例外処理の基本的な構文はtryexceptのペアで構成されます。

  • tryブロック: エラーが発生する可能性があるコードを記述します。
  • exceptブロック: tryブロック内で指定した種類のエラーが発生した場合にのみ実行されるコードを記述します。

以下の例は、ある数値を別の数値で割る簡単な関数です。もし0で割ろうとするとエラーが発生しますが、try-exceptを使うことで、プログラムを停止させることなくエラーを処理できます。

def calculate_ratio(numerator, denominator):
    try:
        # エラーが発生する可能性がある処理
        result = numerator / denominator
        return result
    except ZeroDivisionError:
        # ZeroDivisionError が発生した場合に実行される
        print("エラー:分母に0が指定されました。")
        return None  # エラーのためNoneを返す

# 関数を呼び出して結果を受け取る
print(calculate_ratio(80, 20))
print(calculate_ratio(50, 5))
print(calculate_ratio(99, 0)) # この呼び出しでZeroDivisionErrorが発生
print(calculate_ratio(77, 7))

実行結果:

4.0
10.0
エラー:分母に0が指定されました。
None
11.0

calculate_ratio(99, 0)が呼び出された際、tryブロック内でZeroDivisionErrorが発生します。Pythonはそのエラーを検知し、exceptブロックに処理を移します。そのため、エラーメッセージが表示され、プログラムは停止することなく次の行に進みます。


try-exceptブロックの配置

tryexceptをどこに配置するかによって、エラーを処理する範囲が変わります。

1. 関数内でエラーを処理する

前述の例のように、エラーが発生する可能性のある関数内に直接try-exceptブロックを配置する方法です。これにより、関数がエラーを「自己解決」し、呼び出し元にエラーを伝播させません。

2. 関数呼び出しをtry-exceptで囲む

関数の内部ではなく、関数を呼び出す側でエラーを処理することもできます。

def calculate_ratio_without_try(numerator, denominator):
    # この関数はエラー処理を行わない
    return numerator / denominator

try:
    # 複数の関数呼び出しをまとめてtryブロックで囲む
    print(calculate_ratio_without_try(80, 20))
    print(calculate_ratio_without_try(50, 5))
    print(calculate_ratio_without_try(99, 0))  # ここでエラー発生
    print(calculate_ratio_without_try(77, 7))  # この行は実行されない
except ZeroDivisionError:
    # tryブロック内で発生したZeroDivisionErrorをまとめて捕捉
    print("エラー:不正な引数が原因で計算に失敗しました。")

実行結果:

4.0
10.0
エラー:不正な引数が原因で計算に失敗しました。

calculate_ratio_without_try(99, 0)の呼び出しでエラーが発生すると、その時点でtryブロックの実行は中断され、exceptブロックに処理が移ります。そのため、print(calculate_ratio_without_try(77, 7))の行は実行されません。

どちらの方法を選ぶかは、エラーをどこでどのように扱いたいかによって異なります。一般的には、エラーの原因となる処理の直近でtry-exceptを使う方が、エラーの場所を特定しやすく、より明確なコードになります。


まとめ

tryexceptを使った例外処理は、プログラムをより堅牢でユーザーフレンドリーにするための重要なテクニックです。

  • **try**ブロックに、エラーが発生する可能性のあるコードを置きます。
  • **except**ブロックに、エラーが発生した場合の代替処理を記述します。
  • エラーの種類(ZeroDivisionErrorなど)を指定することで、特定の例外だけを捕捉できます。
  • 例外処理を適切に使うことで、予期せぬエラーによるプログラムのクラッシュを防ぐことができます。

try-exceptは、Pythonプログラミングにおいて避けて通れない重要な概念です。ぜひ使い方をマスターしましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次