Дьявол кроется в деталях. Это зависит от контекста. Когда вы ожидаете эти исключения? Например, если SomeException указывает на довольно распространенное нарушение бизнес-правила, и в этом контексте допустимо возвращать 0, я могу видеть приведенный выше код вполне допустимым. Наличие блока try..catch близко к методу, который вызывает его, не так уж и плохо, так как определить, какой метод может вызвать исключение, может оказаться непростой задачей, если обернуть 10 методов в один гигантский try..catch.
Однако, если это исключения, которые указывают на то, что что-то пошло не так, и SomeException не должно возникать, то возвращение «0», когда скрывается магический индикатор ошибки, может потенциально скрыть, что что-то пошло не так, это может быть кошмар обслуживания, чтобы узнать, где возникла проблема.
Если исключение не является чем-то, из чего вы можете восстановиться, то вы могли бы также поместить его в предложение throws или обернуть его и перебросить его (если исключение зависит от реализации, я бы не просто поместил его в throws) предложение, так как вы не хотите загрязнять чистый интерфейс Исключениями, специфичными для реализации). См. Также эту статью SO о проверенных и непроверенных исключениях, которые применимы.
Не регистрировать исключение также не обязательно плохо. Если исключение возникает очень часто и не является показателем того, что что-то пошло не так, то вам не нужно каждый раз записывать в журнал, иначе вы «отравите журналы» (т. Е. Потому что, если 99% записей журнала связаны с SomeException, то какова вероятность того, что вы пропустите исключение в журнале и / или у вас закончится свободное место на диске, потому что вы получаете сообщение журнала 50 000 раз в день).