やっほー!国内のAI狂いだよ!✨
第22回へようこそ!今回は、プログラムの安全装置「例外処理(Error & Exception)」について学ぶよ。
人間だってミスをするし、機械だって故障するよね。
大事なのは「絶対にミスしないこと」じゃなくて、「ミスが起きた時にどうカバーするか(リカバリー)」なんだ。
Pythonには、エラーを優しくキャッチしてくれる try-except という機能があるから、これを使いこなして「落ちないプログラム」を作ろう!🛡️🦸♀️
公式の「ここがわかりにくい」:構文エラーと例外の違い
公式ドキュメントでは、エラーを2種類に分けて説明しているよ。
エラーには (少なくとも) 二つのはっきり異なる種類があります。それは 構文エラー (syntax error) と 例外 (exception) です。
これ、要するにこういうこと!👇
- 構文エラー(Syntax Error): 「文法ミス」。プログラムを実行する前に「書き方間違ってるよ!」って怒られるやつ。そもそも動かない。
(例:ifの後のコロン:忘れ、カッコの閉じ忘れ) - 例外(Exception): 「実行時エラー」。文法は合ってるけど、動かしてみたら起きる事故。
(例:割り算で0で割っちゃった、存在しないファイルを開こうとした)
今回学ぶ「例外処理」でキャッチできるのは、後者の「例外」の方だけだよ!(文法ミスは直さないと動かないからね!)
1. try-except:エラーを捕まえる網
使い方はシンプル。
「エラーが起きそうなコード」を try ブロックに入れて、「エラーが起きた時の処理」を except ブロックに書くんだ。
🐍 サンプルコードを見る(クリックで開閉)
# 0で割るという危険な行為に挑戦!
try:
num = 10
div = 0
result = num / div
print(f"結果は {result} です")
except ZeroDivisionError:
print("【エラー】0で割ることはできません!")
print("プログラムは無事に終了しました")
【エラー】0で割ることはできません!
プログラムは無事に終了しました
もし try-except がなかったら、真っ赤なエラーメッセージが出てプログラムがそこで強制終了しちゃうところだったね。
except のおかげで、メッセージを表示して次の処理(最後のprint)に進めたよ!✨
2. 複数の罠に対応する
エラーの種類(例外クラス)はたくさんあるよ。
ValueError(値がおかしい)、TypeError(型がおかしい)、IndexError(範囲外)などなど。
それぞれ別々の対処をしたい時は、except を並べて書けるんだ。
🐍 複数対応のサンプル(クリックで開閉)
try:
# ユーザーに入力させる(数字以外が来るかも?)
x = int(input("数字を入れてね: "))
result = 100 / x
print(f"100を{x}で割ると {result} です")
except ValueError:
print("エラー:数字じゃない文字が入力されました!")
except ZeroDivisionError:
print("エラー:0を入力しないでください!")
except Exception as e:
# その他の予期せぬエラーはここでキャッチ
# as e でエラーの詳細情報を受け取れる
print(f"予期せぬエラーが発生しました: {e}")
Exception はほとんどの例外の親玉。具体的なエラー(ZeroDivisionErrorなど)を先に書いて、最後に
Exception で「その他全部」を拾うのが鉄則だよ!
3. 【試験頻出】else と finally の役割
try には else と finally もくっつけられるよ。
ここ、ループの else と同じくらい試験に出るから要チェック!
else:エラーが起きなかった時だけ実行される(tryの成功祝い🎉)。finally:エラーが起きても起きなくても、絶対に最後に実行される(後片付け🧹)。
🐍 全部入りコード(クリックで開閉)
def divide_check(a, b):
try:
result = a / b
except ZeroDivisionError:
print("× エラー:0除算")
else:
print(f"○ 成功:答えは {result}")
finally:
print("--- 処理終了(必ず実行) ---")
print("【1回目:成功パターン】")
divide_check(10, 2)
print("\n【2回目:失敗パターン】")
divide_check(10, 0)
【1回目:成功パターン】
○ 成功:答えは 5.0
— 処理終了(必ず実行) —
【2回目:失敗パターン】
× エラー:0除算
— 処理終了(必ず実行) —
finally は、ファイルを開いた後に閉じたり、データベース接続を切断したりする「後始末」によく使われるよ。
4. raise:わざとエラーを起こす!
自分からエラーを発生させたい時は raise を使うよ。
例えば「年齢がマイナスなんてありえない!」って時に、自分でエラーを作って投げることができるんだ。
age = -5
if age < 0:
raise ValueError("年齢は0以上じゃないとダメだよ!")
試験に出る!要注意ポイント
今回の範囲で、Python 3 エンジニア認定基礎試験によく出るポイントをまとめたよ!📝
① 例外の階層構造(継承)
例外はクラスとして定義されていて、親子関係があるよ。
親クラス(例:Exception)で except すると、その子クラス(例:ValueError)も全部キャッチしちゃう。
だから、「狭い範囲(子)」を先に、「広い範囲(親)」を後に書かないと、特定のエラー処理が動かなくなっちゃうんだ。
② 構文エラーはキャッチできない
try ブロックの中に print("hello" (カッコ閉じ忘れ)みたいな構文エラー(SyntaxError)があっても、それは実行前にPythonが見つけて止めるから、except SyntaxError: で捕まえることはできないよ(プログラム自体が始まらない)。
「とりあえず全部のエラーを無視したい!」と思って
except: pass (裸のexcept)を書いたことがあるの。そしたら、プログラムを停止させる
Ctrl+C (KeyboardInterrupt)まで無視されちゃって、無限ループが止まらなくなってPCごと再起動したよ😱エラーを握りつぶすのは危険!どうしてもやるなら
except Exception: にしようね(これならシステム終了系はすり抜けるから)。
理解度チェック!ミニクイズ
例外処理の仕組み、理解できたかな?
試験レベルの問題でチェックしてみよう!🔍
次のうち、try-except で捕捉できないエラーはどれ?
▼ クリックで正解を表示
try-except で捕捉できないエラーはどれ?SyntaxError
解説:
構文エラーはプログラムの実行前(パース段階)に検出されるから、try ブロックで囲んでも捕捉できないよ。
try 文の else 節が実行されるのはどんな時?
▼ クリックで正解を表示
try 文の else 節が実行されるのはどんな時?解説:
else は「成功ルート」。例外が発生せず、try ブロックを無事に完走した時だけ実行されるよ。
常に実行されるのは finally だね。
意図的に例外を発生させるキーワードは?
▼ クリックで正解を表示
raise
解説:
JavaやC++などは throw だから間違えやすいけど、Pythonでは raise(持ち上げる、発生させる)を使うよ。
まとめ:次回への引き
今回は「例外処理」について解説したよ!
エラーを恐れず、適切に対処できるようになれば、安心してプログラムを動かせるね✨
次回は、いよいよPythonのラスボス級概念、「クラス(Class)とオブジェクト指向」に突入するよ!
「オブジェクト指向って何?」って人も大丈夫。
「たい焼きの型」と「たい焼き」の関係で分かりやすく説明するから、リラックスして待っててね!👋✨
出典: Python公式チュートリアル
Copyright © 2001-2026 Python Software Foundation. Licensed under the PSF License.






