🐍

Pythonの基礎:エラーに対処する – 例外処理の基本を解説

に公開

Pythonでプログラムを書いていると、予期せぬエラーが発生することがあります。
このようなエラーに対して 例外処理(try-except) を使えば、プログラムの異常終了を防ぎつつ、柔軟な対応が可能です。

この記事では、Pythonの例外処理の基本について、以下のポイントを解説します。

  • エラーの種類
  • try-except文の使い方
  • finally句の役割

エラーの種類

Pythonのエラーには大きく分けて次の2つがあります。

種類 内容
構文エラー 文法ミスによるエラー(実行前に検出)
例外(Exception) 実行中に発生するエラー

構文エラーの例

print("Hello"  # 閉じカッコがないため構文エラー

実行結果:

SyntaxError: '(' was never closed

構文エラーはコードを書いている時点で検出され、プログラムは一切実行されません。


例外の例

x = 10 / 0  # ZeroDivisionError(0による除算)

実行結果:

ZeroDivisionError: division by zero

このように、プログラムが正しい構文でも、実行中に起こる問題で停止することがあります。これが「例外(Exception)」です。


try-except文の使い方

例外が発生しそうな処理は、tryブロックで囲みます。
その後に exceptブロック でエラー時の対処を記述します。

try:
    num = int(input("数字を入力してください: "))
    result = 10 / num
    print("結果:", result)
except ZeroDivisionError:
    print("0では割り算できません。")
except ValueError:
    print("整数を入力してください。")

このコードでは、次の2つの例外を想定しています:

  • 入力が 0 の場合 → ZeroDivisionError
  • 入力が数値でない場合 → ValueError

実行例①(0を入力した場合):

数字を入力してください: 0
0では割り算できません。

実行例②(abcを入力した場合):

数字を入力してください: abc
整数を入力してください。

実行例③(2を入力した場合):

数字を入力してください: 2
結果: 5.0

例外が発生しない場合は、tryブロック内の処理がそのまま実行されます。


finally句の役割

finally ブロックは、エラーの有無にかかわらず 最後に必ず実行される処理 を記述します。

try:
    f = open("sample.txt", "r")
    content = f.read()
    print(content)
except FileNotFoundError:
    print("ファイルが見つかりません。")
finally:
    print("処理を終了します。")

ファイルが存在する場合は内容を表示し、存在しない場合はエラーメッセージが表示されますが、
どちらでも「処理を終了します。」は必ず出力されます。

実行結果(ファイルが存在しない場合):

ファイルが見つかりません。
処理を終了します。

例外の情報を取得する

エラーの内容を詳細に記録したい場合、Exception オブジェクトからメッセージを取得できます。

try:
    1 / 0
except Exception as e:
    print("エラー内容:", e)

実行結果:

エラー内容: division by zero

また、スタックトレース(エラーの発生箇所までの経緯)を表示するには、traceback モジュールが便利です。

import traceback

try:
    1 / 0
except Exception as e:
    traceback.print_exc()

実行結果:

Traceback (most recent call last):
  File "main.py", line 4, in <module>
    1 / 0
ZeroDivisionError: division by zero

まとめ

  • 構文エラー は文法ミスによるエラーで、実行前に検出されます。
  • 例外(Exception) は実行中に発生する問題で、適切に対処しないとプログラムが停止します。
  • try-except 文を使えば、エラーを捕捉してユーザーに適切な対応を促すことができます。
  • finally ブロックは、処理の後始末を確実に行う場面に有効です。
  • Exceptiontraceback を使えば、デバッグやログ記録にも対応できます。

例外処理を理解して使いこなせば、Pythonプログラムの信頼性は格段に向上します。

Discussion