I saw this pop quiz: What’s wrong with throwing a checked exception as a penalty?. It brought a different question to my mind.
What's wrong about catching/handling exceptions and not allowing it to propagate?
What do you think? Should we always allow exception to propagate?
Do you give any advice in your book about this?
Exceptions should be caught at the level where the appropriate corrective action can be taken.
Corollary: an exception should never be caught by the method that threw it. If it threw it, by definition it doesn't know how to fix it.
If no corrective action is possible, catch it at the level when such impossibility can be ascertained (probably close to your "main" or entry point)
and log it and/or inform the user, as appropriate, before exiting.
In the book I work a lot with exceptions in chapter 5 in the context of reliability,
focusing on when, why, and what type of exceptions to throw.