
Pythonを学んでいく中で、必ず直面するのが「エラー処理」です。特に例外処理の基本であるtry-except構文は、プログラムを安全に実行するために欠かせません。この記事では、初心者がつまずきやすいポイントを中心に、例外処理の考え方と正しい使い方を整理します。
Pythonの基礎
🟣 Pythonの基礎知識(入門編)
📌はじめてでも安心!Pythonで「動く感動」を味わえる超やさしい入門ステップ
🟣Pythonの基礎知識(基礎編)
📌基本文法から実用テクニックまで、Pythonの土台をしっかり固めるステップアップ講座
├─【Pythonの基礎知識】Pythonのデータ型を正しく使いこなす!
├─【Pythonの基礎知識】条件分岐の完全理解(if, elif, else)
├─【Pythonの基礎知識】繰り返し処理の深掘り(for, while)
├─【Pythonの基礎知識】Pythonコレクション型の正しい選び方
├─【Pythonの基礎知識】関数を使ってコードを整理しよう
├─【Pythonの基礎知識】try-exceptで学ぶPythonの例外処理
├─【Pythonの基礎知識】Pythonのファイル操作を完全理解
├─【Pythonの基礎知識】モジュールとライブラリを使う方法
├─【Pythonの基礎知識】Pythonのクラスとオブジェクトを最初に学ぶ
└─【Pythonの基礎知識】よく使う内蔵関数のまとめ
🟣Pythonの基礎知識(実践編)
📌知識を活かす実践編!ミニアプリや業務自動化で「できる」を実感できる構成
エラー処理とは?なぜ必要なのか
コードは必ず「うまくいかない場面」に遭遇します。例外処理は、それに備えてプログラムの安定性を保つ手段です。
文法エラーと実行時エラーの違い
Pythonでは、プログラムの実行前に発見される文法エラー(SyntaxError)と、実行中に発生する実行時エラー(RuntimeError)があります。
文法エラーはインタプリタによって即座に検出されますが、実行時エラーはコードが動作して初めて顕在化します。
Pythonの例外(Exception)とは何か
実行中に発生するエラーの多くは「例外(Exception)」としてPythonに内包されています。代表的な例外には次のようなものがあります:
- ZeroDivisionError:ゼロによる除算
- TypeError:型が合わない操作
- FileNotFoundError:ファイルが存在しない
これらはすべて、Pythonの組み込み例外クラスとして定義されており、try-exceptで捕捉できます。
例外が起きるとプログラムはどうなる?
例外が発生しても適切に捕捉されていない場合、プログラムはその場で強制終了します。
一方で、 try-exceptを使って明示的に処理を分けておけば、「エラーがあっても落ちない」プログラムを実現できます。
try-except構文の基本と実行の流れ
例外処理の中心である try-except構文は、「通常処理」と「例外発生時の処理」を明確に分けて記述できます。
try-exceptの基本構文と挙動
基本的な構文は以下のとおりです。tryブロック内でエラーが発生すると、exceptブロックが実行されます。
try:
value = int(input("数字を入力してください: "))
except ValueError:
print("数字を入力してください。")
else:
print("入力された数字は:", value)
エラーが発生しなければ else節が、エラーが発生した場合は except節が実行されます。
exceptで受け取るエラーの種類
Pythonのexceptでは、発生したエラーの型を指定して処理を分けることができます。
- ValueError:int変換できない文字列など
- ZeroDivisionError:0で割ったとき
- TypeError:型が合わない操作
複数のエラーをまとめて処理したい場合は、カンマ区切りで指定も可能です。
try:
処理
except (TypeError, ValueError):
共通の処理
else, finally の使いどころと注意点
elseは「例外が発生しなかった場合のみ」実行され、 finallyは「例外の有無に関係なく必ず」実行されるブロックです。
例えばファイル処理では、 finallyを使って確実にファイルを閉じるようにします。
try:
f = open("sample.txt", "r")
data = f.read()
except FileNotFoundError:
print("ファイルが見つかりません。")
finally:
f.close()
注意:finally内で例外が発生すると、元の例外が上書きされることがあるため、注意が必要です。
補足:Pythonのtry-exceptは「else」も使える
Pythonの例外処理構文は、Javaなど他言語と異なり、try-except に else 節を追加できるという特徴があります。 これは「成功時の追加処理」や「正常系の後続処理」に使えるため、設計上の柔軟性が高まります。
try-except-else-finally の基本構成
以下のように4つの節を組み合わせることが可能です。
try:
処理本体
except エラー種類:
エラー発生時の処理
else:
エラーが発生しなかった場合の処理
finally:
必ず最後に実行する処理(例:後始末)
Javaとの構文の違い
比較項目 | Python | Java |
---|---|---|
try 節 | 標準構文 | 標準構文 |
except / catch | except を使用 | catch を使用 |
else 節 | あり(✅) | なし(❌) |
finally 節 | あり | あり |
例外の種類 | 任意指定可 | 明示的指定が必須 |
設計上のメリット
Pythonの try-except-else-finally 構文を活用することで、例外処理・成功時処理・後始末を1つの流れで記述できます。 Javaで分割して書く必要があった部分も、Pythonではスマートにまとめられるのが利点です。
つまり、try節に正常系だけ、exceptに異常系だけ、elseに成功後処理だけ、finallyに後始末だけを記述できることで、「ログの条件分岐」や「二重記述」が不要になるんです。
「ログ設計を整理できる言語機能」って観点では、Pythonはかなり洗練されてます。ビープロ的にも、シェルやJavaより構造化しやすい設計思想ですね。
具体例:ゼロ除算やファイル読み込み時の例外
try-exceptは理論ではなく「実例」で覚えるのが効果的です。ここでは代表的なエラーシーンを使って学びます。
ZeroDivisionError(ゼロ除算)の対処例
ゼロで割り算をしたときに発生するエラーです。入力値をチェックしてから演算する、もしくは例外処理で回避できます。
try:
num = int(input("割られる数を入力: "))
result = 10 / num
print("結果:", result)
except ZeroDivisionError:
print("0で割ることはできません。")
FileNotFoundError(ファイルの読み込み失敗)
存在しないファイルを読み込もうとすると、このエラーが発生します。 try-exceptで処理を分けておくことで、ユーザーにわかりやすく案内できます。
try:
with open("data.txt", "r") as file:
content = file.read()
print(content)
except FileNotFoundError:
print("ファイルが見つかりません。")
実務でよくある例:型変換ミスの捕捉
ユーザーからの入力や外部データには、数値に変換できない文字列が含まれることがあります。 ValueErrorの捕捉が有効です。
try:
age = int(input("年齢を入力してください: "))
print("あなたの年齢は", age, "歳です")
except ValueError:
print("数字を入力してください。")
例外処理でやってはいけないパターン
例外処理は便利な反面、使い方を間違えるとバグを見逃す温床になります。ここでは避けるべき例外処理の実例と、その理由を確認します。
exceptの条件なし捕捉(なんでも握りつぶす)
エラーの種類を特定せずにexceptだけを使うと、意図しない例外まで握りつぶしてしまいます。デバッグが困難になるため避けるべきです。
try:
処理
except:
print("なんらかのエラー")
→ 何が起きたか分からないままスルーしてしまう。
ログも表示もしない「無反応な例外処理」
例外が発生したのに何も出力せずにパスするのもNGです。エラーがあることすら分からず、後から原因追跡が不可能になります。
try:
処理
except ValueError:
pass
→ 「ログすら残らない」ので、バグ発見が遅れます。
正常処理にexceptを使ってしまうケース
そもそも発生しないはずのエラーに備えて、正常処理を tryで囲むのは設計ミスです。バグが前提のコードになってしまいます。
try:
if user_input == "yes":
do_something()
except:
print("何かが起きました")
→ 本来 if文で処理を分けるべきで、 tryに頼る必要はありません。
まとめ|例外処理は「想定される異常」のためにある
エラー処理は“備える”ための技術です。書き方を覚えるだけでなく、「どこに備えるか」を考える癖を身につけましょう。次回は、ファイル操作を通じてより実務的なエラー制御に踏み込みます。
この記事を読んだら、次は「【Pythonの基礎知識】Pythonのファイル操作を完全理解」の使い方に進むのがおすすめです。