В большинстве языков высокого уровня работа с исключениями часто более эффективна, чем if-else, поскольку вы избегаете многократной проверки. например:
if value is not 0 then print 10 / value
В большинстве интерпретаторов 10 / value
будет внутренне проверять, является ли value
допустимым делителем, прежде чем использовать его, так что вы фактически дважды проверяли одну и ту же проблему. В некоторых случаях исключение может исходить от аппаратного обеспечения, поэтому проверка программного обеспечения вообще не выполняется.
С другой стороны:
try print 10 / value ... catch exception
Будет только проверять, является ли значение действительным один раз. Более того, есть большая вероятность, что тест будет лучше оптимизирован, чем ваш собственный код, и будет способен обрабатывать действительно неожиданные условия (например, ошибки нехватки памяти).