Создание исключения для сбоя является хорошим способом для продолжения, и если вы возвращаете много разных значений, вы можете вернуть кортеж. Для конкретного случая, на который вы ссылаетесь, я часто использую промежуточный подход: возвращать измененную строку в случае успеха и возвращать None в случае неудачи. Мне достаточно невосстановленного программиста на Си, чтобы захотеть вернуть нулевой указатель на символ при ошибке.
Если бы я писал подпрограмму, которая использовалась бы как часть большой библиотеки и использовалась другими разработчиками, я бы выкинул исключение при сбое. Когда я ем свою собачью еду, я, вероятно, возвращаю разные типы и проверяю по возвращении.