---
paths: ["src/**", "scripts/**"]
---

# エラーハンドリング方針 (Error Handling)

例外を raise / 捕捉するコード（`src/**`・`scripts/**`）を書くときは本ルールに従うこと．コーディング全般の規約は `.claude/rules/coding-style.md` を参照する．

## 例外の使い分け (Exception Types)

| 状況 | 送出する例外 |
| --- | --- |
| ユーザー入力（YAML / STL ファイル等）の内容・形式の問題 | `ValueError` に統一して raise |
| 内部論理エラー（到達しないはずの分岐・不変条件違反等） | `RuntimeError` |
| Pydantic を使うバリデーション | `pydantic.ValidationError` をそのまま伝播（握りつぶさない） |

## 方針 (Policy)

- **最小限主義**: 独自例外クラスの階層はまだ導入しない．上表の標準例外で表現できる範囲に留める．表現しきれないケースが増えてきた時点で独自例外の導入を検討する．
- **メッセージは日本語可**: 原因と対処が分かる具体的なメッセージを付ける（例: どのファイル・どのフィールドが不正か）．
- **握りつぶさない**: `except:` で例外を無言で捨てない．捕捉するなら再送出するか，ログを残した上で明示的に処理する．
- **境界で検証する**: ユーザー入力の検証は入口（CLI・スキーマ読込）で行い，核計算モジュールは「検証済みの正しい入力が来る」前提で書く（`.claude/rules/project-structure.md` の依存方向・純関数優先と対応）．

## 参考 (References)

- [Python 公式ドキュメント — 組み込み例外](https://docs.python.org/3/library/exceptions.html)
- [Pydantic — Error Handling](https://docs.pydantic.dev/latest/errors/errors/)
