エラーでなくワーニング

辞書のキーによるアクセス d[k] は存在しないキーに対して例外を投げるというのを読んでいてふと思ったのだが、例外でなくワーニングにすることは可能なのだろうか?つまり、d[k] で本来呼ばれるべき KeyError をフックして自前の例外を呼ぶ方法があるのだろうか?


それが可能であれば、そのタイミングで例外で落とすのではなく、例外をキャッチして見つからなかったキーのリストを保存しておいて、辞書 d を処理するループが終わった段階で見つからなかったキーの一覧と共にワーニングメッセージを出したい。そいういうことが可能なのだろうか?


もし可能であれば、メインのロジックの部分をエラー処理で汚すことなく、自前の例外クラスの中に閉じ込められる。メインのロジックの中では例外をフックする行とワーニングを表示してとお願いする行があれば済むのできれいにコードを分散できる。


Pythonでは難しい気がするが、そういうことをできる言語って他にあるのかな?知っている人いたら教えて欲しい!


追記:
ビルトインのdictを継承した自前クラスを作成すればできると気がついた。しかし大げさになるので、やはりビルトインの dict の KeyError にフックをかけたいが、それは無理だろうか…。

追記2:
メソッドはオーバーライドできるので、特異メソッドで__getitem__をオーバーライドすればできるかも。処理を委譲すると KeyError 例外をなげてしまうので委譲せずに自分の好きなように書き直せば良い。間接的な方法だけど結構いけるかも。