Pythonでプログラミングをしていると、どうしても様々な「エラー」に遭遇します。例えば、「読み込もうとしたファイルが存在しなかった」「数字を入力してほしいのに文字が入力された」といったケースです。
このような予期せぬエラーが発生した際、何の対策もしていないとプログラムは強制的に停止してしまいます。そこで役立つのが「例外処理(try-except)」です。
この記事では、エラーを安全に回避し、プログラムを正常に動かし続けるための例外処理の基本についてわかりやすく解説します。
例外処理とは?
例外処理とは、プログラムの実行中に起こりうる「予期せぬエラー(例外)」をあらかじめキャッチし、プログラムが突然クラッシュするのを防ぐ仕組みのことです。
エラーが起きそうな処理を監視し、「もしエラーが起きたら、代わりにこの処理を行ってね」と指示を出しておくことで、システム全体を安定して稼働させることができます。
try-exceptの基本構文
Pythonで例外処理を実装するには、tryとexceptというキーワードを使います。
try:
# エラーが発生するかもしれない処理
except Exception:
# エラーが発生した時に実行される処理tryブロック:通常実行したい、エラーが起こる可能性のあるコードを書きます。exceptブロック:try内でエラーが起きた場合の「リカバリー処理」を書きます
(Exceptionはすべての例外をキャッチする汎用クラスです)。
具体例1:ファイルの読み込み
try:
f = open("sample.txt", "r")
data = f.read()
print(data)
except FileNotFoundError:
print("エラー:指定されたファイルが見つかりませんでした。")この例では、sample.txtが存在しない場合にプログラムが異常終了するのを防ぎ、代わりに分かりやすいエラーメッセージを表示させています。
エラーの種類に応じた処理(特定の例外キャッチ)
exceptブロックは、エラーの種類(例外クラス)を指定して複数記述することができます。これにより、「どんなエラーが起きたか」に応じた的確な処理が可能になります。
具体例2:ユーザーからの数値入力
try:
num = int(input("整数を入力してください: "))
print(f"入力された数字の2倍は {num * 2} です")
except ValueError:
# 文字列などが入力され、数値に変換できなかった場合
print("エラー:必ず『整数』を入力してください。")
except Exception:
# 上記以外の予期せぬエラーが発生した場合
print("エラー:何か問題が発生しました。")さらに理解が深まる!よくあるエラーの具体例
初心者がプログラミング中によく遭遇するエラーを回避する例をさらに2つ紹介します。
具体例3:ゼロ除算エラー(ZeroDivisionError)の回避
割り算を行うプログラムで、分母が「0」になってしまうとPythonは計算できずにエラーを出します。これを防ぐ例です。
try:
# 10をユーザーの入力した数字で割る
divisor = int(input("10を何で割りますか?: "))
result = 10 / divisor
print(f"答えは {result} です")
except ZeroDivisionError:
# divisorに0が入力された場合
print("エラー:0で割ることはできません。")
except ValueError:
print("エラー:数字を入力してください。")具体例4:リストの範囲外アクセス(IndexError)の回避
リスト(配列)からデータを取り出す際、存在しない要素番号(インデックス)を指定してしまった場合のエラーを防ぎます。
fruits = ["りんご", "みかん", "バナナ"]
try:
# 3番目(インデックスは3)の要素を取り出そうとする
# ※実際のインデックスは 0, 1, 2 までしかありません
print(fruits[3])
except IndexError:
print("エラー:指定された要素はリストに存在しません。")実用的な例外処理の活用例
例外処理は、プログラムの安定性を高めるために非常に重要であり、以下のようなエラーが起こりやすい箇所でよく活用されます。
- ファイル操作:ファイルが存在しない、アクセス権限がない場合
- ネットワーク通信:通信が途切れた、サーバーからの応答がない場合
- データベース操作:DBへの接続に失敗した、クエリ実行に失敗した場合
- ユーザー入力:想定外の不正なデータが入力された場合
注意点
例外処理は非常に便利ですが、「すべてのコードをむやみにtry-exceptで囲む」のはNGです。何でもかんでも例外処理で握りつぶしてしまうと、「本当は修正すべきバグ(単純な入力ミスなど)」まで隠れてしまい、どこでエラーが起こっているのか特定できなくなる弊害があります。
「エラーが発生する可能性が明確な場所」に絞るなど、使い方はよく考えて使用してください。
まとめ
この記事では、Pythonの例外処理について、try-exceptの基本的な使い方から、特定の例外のキャッチ方法、さらには実用的な活用例まで解説しました。
例外処理は、プログラムの安定性を高め、エラー発生時の適切な処理を実現するために不可欠です。ぜひ今回の内容を参考に、例外処理を活用した堅牢なプログラムを作成してみてください。


コメント