---
paths: ["Tongue extraction/**/*.cs"]
---

# エラー処理方針 (Error Handling)

例外処理・ログ出力を書くときは本方針に従うこと．

## エラーの分類と扱い (Error Categories)

| 分類 | 例 | 扱い |
| --- | --- | --- |
| 画像 1 枚だけの失敗 | 舌を検出できない，舌領域が 1 つにまとまらない | その画像を失敗として記録し，次の画像へ進む．`analysis.csv` の失敗行の形式（`<画像名>,Tongue detection error` 等）は変えない |
| 解析を続けられない失敗 | モデル・外部 exe・DLL が見つからない，入力フォルダが無い | 解析を止め，原因（どのファイルが無いか）をダイアログで伝える |
| 想定外の例外 | 上記以外 | 解析を止め，ダイアログで伝え，ログに詳細を残す．画面を操作できる状態に戻す |

## 決まり (Rules)

- **例外を握りつぶさない．**`catch` だけで何もしない，または `catch { }` で原因を捨てる書き方をしない．捕まえた例外はログに残す．
- 捕まえる例外の型をできるだけ具体的にする（`catch (Exception)` は最上位の処理だけにする）．
- `BackgroundWorker` で解析するときは `RunWorkerCompleted` で `e.Error` を確認し，例外を画面に伝える．
- 外部 exe を呼んだら終了コードと出力ファイルの有無を確認し，失敗なら「画像 1 枚だけの失敗」として扱う．
- ダイアログ（`MessageBox`）は画面のスレッドから出す（解析スレッドからは `Invoke` を使う）．

## ログ (Logging)

- 解析のログは出力フォルダに `log.txt` として書き出す（画像ごとの開始・終了・失敗理由，想定外の例外の詳細）．
- `Console.WriteLine` は WinForms アプリでは見えないため，確認用の出力に使わない．
- デバッグ用の表示（`Cv2.ImShow`・`Cv2.WaitKey`・出力先の固定等）をコミットに残さない．
