赤い文字が十行
市役所の情報システム課で、手数料を集計するプログラムを動かしました。画面に、英語の赤い文字が十行ほど出て止まりました。
慌てて全部を読もうとすると、どこを見ればいいかわからなくなります。
実は、読む順番が決まっています。大事な一行を見つければ、直し方の半分はわかります。
このレッスンのゴール
メモ
エラーメッセージを読んで、直し方を見つけられる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| エラーメッセージ | プログラムが止まった理由を伝える文 | |
| トレースバック | エラーまでの道すじを示す表示 | Traceback |
| 例外の種類 | エラーの分類を表す名前 | TypeError |
| ドキュメント | 道具の使い方を書いた公式の説明 | |
| SSH | 離れたサーバーに安全にログインする方法 |
学生が入力するセルは、このプレビューでは空白です。
トレースバックは一番下から読む
Python が止まると、トレースバックが出ます。上から下へ、エラーまでの道すじが書かれています。
読むのは一番下の行からです。そこに例外の種類と、短い説明があります。
次に、その上の line 6 のような行を見ます。どのファイルの何行目で止まったかがわかります。
止まるプログラムを動かす
# 市役所の窓口で受け付けた手数料を合計します。
fees = ["300", "450", "200"]
total = 0
for fee in fees:
total = total + fee # ここで止まります
print("合計:", total, "円")
# 実行して、一番下の行を読んでください。
# やってみましょう: fee を int(fee) に変えて、もう一度実行してください。
大事な一行を日本語にする
一番下の行は英語ですが、短いので一語ずつ読めます。
下の例では、「int と str は + で足せない」と書いてあります。数と文字列を足そうとした、という意味です。
何が起きたかを自分の言葉で言えれば、直し方が見えてきます。今回は、文字列を int() で数に変えれば直ります。
例: 先ほどのトレースバック
Traceback (most recent call last):
File "fees.py", line 6, in <module>
total = total + fee
TypeError: unsupported operand type(s) for +: 'int' and 'str'
例: よく見る例外と意味
| 例外の種類 | 意味 | よくある原因 |
|---|---|---|
| TypeError | 型が合わない | 数と文字列を足した |
| ValueError | 値の形が合わない | 「1,280円」を int にした |
| KeyError | そのキーがない | キー名の打ち間違い |
| FileNotFoundError | ファイルがない | パスの間違い |
| NameError | その名前がない | 変数名の打ち間違い |
学生が入力するセルは、このプレビューでは空白です。
よくある誤解
注意
エラーが出たら、トレースバックの一番上を読めばよい、と思われがちです。一番上は、プログラムの入口にすぎません。止まった理由は一番下にあります。必ず下から読みましょう。
調べ方と質問の仕方
直し方がわからないときは、一番下の行をそのまま検索します。ファイル名や自分の数字は外します。
答えは、まず公式のドキュメントで確かめます。古い記事の方法は、今の版では動かないことがあるからです。
人に聞くときは、三つを書きます。何をしたか、何が起きたか、何を試したかです。
サーバーのエラーは SSH で見る
本番のサーバーで起きたエラーは、サーバーのログに残ります。
サーバーには ssh ユーザー名@サーバー名 でログインします。中に入れば、前に学んだ tail や grep でログを読めます。
下は実際のやりとりの例です。練習環境にはネットワークがないので、読むだけにします。
例: サーバーでログを見る
$ ssh [email protected]
sato@app01:~$ tail -n 3 /var/log/app/error.log
2026-10-20 09:14:02 ERROR 申請番号 3301 の保存に失敗しました
2026-10-20 09:14:02 ERROR ValueError: invalid literal for int() with base 10: '1,280円'
2026-10-20 09:15:40 INFO 再起動しました