結論から言うと、例外名を読むと「どの種類の問題が起きたのか」を大まかに判断できます。
Pythonのエラー画面には、最後のほうに TypeError や ValueError のような名前が表示されます。
最初は難しく見えますが、例外名には原因を探すための手がかりが入っています。
この記事では、Pythonでよく出る例外を、実務での読み方に近い形で整理します。
この記事でわかること
完成コード
完成コードは次の通りです。
def parse_order(row: dict[str, str]) -> dict[str, int | str] | None:
try:
item = row["item"]
quantity = int(row["quantity"])
unit_price = int(row["unit_price"])
except KeyError as error:
print(f"必要な列がありません: {error}")
return None
except ValueError as error:
print(f"数値に変換できない値があります: {error}")
return None
return {
"item": item,
"quantity": quantity,
"unit_price": unit_price,
"total": quantity * unit_price,
}
rows = [
{"item": "ノート", "quantity": "3", "unit_price": "120"},
{"item": "ペン", "quantity": "abc", "unit_price": "80"},
{"item": "ファイル", "quantity": "2"},
]
for row in rows:
order = parse_order(row)
if order is not None:
print(f"{order['item']}: {order['total']}円")コードのポイント
このコードでは、注文データを辞書として受け取り、数量と単価を数値に変換して合計金額を計算しています。
KeyErrorは、辞書に指定したキーがないときに発生しますValueErrorは、値を期待した形式に変換できないときに発生しますexcept ... as errorと書くと、エラーの内容を変数として扱えます- エラーになった行は
Noneを返し、処理を続けています
例外名を見ると、データの形が違うのか、値の中身が違うのかを切り分けやすくなります。
コードを順番に説明します
主要な処理を分けて説明します。
1. 辞書のキーを取り出します
item = row["item"]
quantity = int(row["quantity"])
unit_price = int(row["unit_price"])row["item"] のように辞書から値を取り出すとき、指定したキーが存在しなければ KeyError が発生します。
CSVを DictReader で読んだときや、APIから受け取ったJSONを扱うときによく出る例外です。
この例では、3件目のデータに unit_price がないため、KeyError になります。
列名のスペル違い、設定ファイルの項目不足、APIレスポンスの形式変更などが原因になることがあります。
2. 文字列を数値へ変換します
quantity = int(row["quantity"])
unit_price = int(row["unit_price"])int() は、文字列を整数に変換する関数です。"3" や "120" は変換できますが、"abc" のような文字列は整数として解釈できないため ValueError になります。
この例では、2件目の quantity が "abc" なので ValueError が発生します。
ファイルや入力フォームから受け取った値は文字列であることが多いため、数値に変換する場所ではよく確認が必要です。
3. 例外名ごとに処理を分けます
except KeyError as error:
print(f"必要な列がありません: {error}")
return None
except ValueError as error:
print(f"数値に変換できない値があります: {error}")
return NoneKeyError と ValueError を分けているため、原因に合わせたメッセージを出せます。
どちらも「注文データを処理できない」という結果は同じですが、直す場所は違います。
KeyError なら列名やキーの有無を確認します。ValueError なら値の中身が数値として正しいかを確認します。
このように、例外名は調査の出発点になります。
実務で使うときのポイント
実務では、エラーが出たらまず最後の例外名とメッセージを見ます。
長いエラー表示の全部を一度に理解しようとしなくても、最後の行から原因を絞り込めることが多いです。
よく出る例外は、次のように読み分けます。
TypeErrorは、型の使い方が合わないときに出ます。文字列と数値をそのまま足すような場面で起きますValueErrorは、型は合っているものの値の中身が処理に合わないときに出ます。int("abc")などが例ですKeyErrorは、辞書に指定したキーがないときに出ます。列名や設定項目を確認しますIndexErrorは、リストに存在しない位置を指定したときに出ます。要素数を確認しますFileNotFoundErrorは、指定したファイルが見つからないときに出ます。パスや実行場所を確認します
自動化ツールやデータ処理では、例外名を読めるだけで調査がかなり速くなります。
第3章で扱ったCSVやJSONでも、列名不足なら KeyError、数値変換の失敗なら ValueError のように、原因が例外名に表れます。