Fix for Issue #17547

ActiveModel built-in validators should use the custom message passed in as :message option
AFAIK try-catch is discouraged in Ruby because it makes it seem like an error condition instead of expected use case. It makes the intent less clear. In this particular method, it also conflicts with an existing logic where `case` statement already checks whether `message` is a `Proc` or `Symbol`. If your goal is optimization, you should provide some benchmarks to convince that the benefit outweights the increased code complexity.

Furthermore, if I understand correctly, the problem you are trying to solve is not how to handle proc vs symbol, but only to handle case of custom error message. I think the implementation should then focus on ensuring the message object should be constructed from multiple sources, either `options[:message]` or default message from argument. So consider using the above example snippet `message = options[:message] || default_message` and leaving the rest of proc vs symbol handling logic unchanged.