と思ったけど

明らかな異常系以外で例外に頼らなければいけない状況は変だ、と思い直した。
気軽にぽんぽん例外を投げるような設計は、どうなのだろう、と。
その辺は言語の文化も関わってくるけれど、例えばC++だと、例外は基本的に「例外的な事情」がある時しか投げないような設計が多い( boost::lexical_cast のような例外も多いが)。
そういう「よくできたC++のライブラリ」は、事前チェックで例外を投げることを殆ど回避できる仕組みになってるし、例外を気軽に投げる設計のライブラリでも、例外が投げられることが正常な実行パスの中に含まれるようなプログラムを書くような事は、基本的に行わない。
もっとも、この辺は正に言語の文化次第である。
例えば Python では、 for 文という基本的な構造において、処理終了時に例外が投げられることを前提とした設計をしている。これはまさに「正常な実行パスの中に例外が投げられる」例であり、別にこういう文化もあっていいと僕は思う。
けれど、例外を前提としないコードを書くことは、どんな言語でも出来るはずだ。
もし例外を使わないと上手くコードがかけないなら、それは設計がおかしいのかもしれない。