Я считаю, что иногда исключения полезны для строительства DSL s. Я знаю, это звучит странно, но так как на многих языках нет функций Ruby (ключевое слово return является необязательным, потому что результат последнего оцененного выражения возвращается), мы используем то, что можем.
К примеру, недавно я пытался построить небольшую базу тестирования JavaScript, и я хотел способ для каркасные пользователей, чтобы иметь возможность сказать:
skip();
pending("pending message");
fail("failure message");
вместо:
return skip();
return pending("pending message");
return fail("failure message");
Этими функциями были бы функции библиотеки, которые генерируют исключения, например исключение SkipTest. Единственное рекомендуемое место для их использования - внутри методов тестирования. Эти методы тестирования всегда выполняются в блоке try/catch, где обрабатывается каждый тип исключения, и, в зависимости от исключения, каркас принимает соответствующий шаг.
Это пример использования Исключения для потока управления.
Вот небольшой пример:
$.it("should offer means to explicitly mark a spec as failed", function() {
$.fail("this spec must fail");
});
должен быть wiki сообщества. – SilentGhost
По-видимому, никакой ответ не затрагивает использование JavaScript и Python исключений, чтобы разорвать поток выполнения. –