Sometimes it does make sense when the whole block is either pass or fail with no possibility of recovery. In this OP's instance the whole block of code that is used to reformat and repackage the mail may just have an acceptable level of "fail" status where the app says "ack, ok I do not know how to handle this mail for x reasons and it is acceptable to just pass the original message". Depending on what the requirements are for the app that seems like perfectly acceptable behavior -- recover and stay alive to process mail another day (CPU Cycle) =). I agree that in a whole lot of instances it is better to break down the eval try blocks to recoverable points in your code though.