Если в программе возникла ошибка, то может быть три способа её обработки: Abort, Retry, Ignore. Не может быть универсального подхода, потому что все ошибки разные.
1. Ignore. Ошибка не проверяется вовсе. Если же она всё-таки обнаруживается, то максимум, что происходит -- сообщение в лог-файле.
Такой подход возможен, когда ошибка особо ни на что не влияет, либо влияет, но на некритические части программы. Вот, например, тот же лог-файл. Не получается сделать туда очередную запись. Будет странно, если программа полностью откажется дальше работать. Если программа должна работать без вмешательства человека, то могут игнорироваться и более серьёзные ошибки. Очень желательно, конечно, мониторить такие ошибки, чтобы опознать надвигающиеся более серьёзные отказы.
Отдельная группа игнорируемых ошибок -- это непредусмотренные ошибки. Это, конечно, самые плохие ошибки. От них надо избавляться. Но не всегда можно предположить, что такая ошибка вообще может возникнуть. Это выясняется в процессе эксплуатации.
2. Retry. При возникновении ошибки производится повторная попытка выполнения операции. Это самый геморройный способ, потому что надо понять, с какой точки надо начинать повтор операции. Иногда надо проделать гораздо больше действий, чем одна последняя строка, чтобы привести программу в нужное состояние. Затрудняется обработка ошибок при помощи try-catch, велик риск либо улучшить нечитаемость программы из-за постоянных циклов с проверкой и повтором, либо ухудшить структуру из-за добавления goto.
Если некоторые ошибки возникают случайным образом (типа ошибок передачи данных), то, конечно, передачу следует повторять. Это позволит не нарушить работу программы, при этом не потребует вмешательства человека. Если несколько попыток ничего не дали, то можно переходить к фазе Abort. Если не считать геморроя с реализацией, этот метод очень хорош, но он замазывает случайные отказы -- вроде всё работает, но на самом деле внутри какой-нибудь железки что-то потихоньку умирает. Необходим строгий мониторинг этого типа ошибок, чтобы в случае увеличения их частоты успеть принять меры до полного отказа.
В некоторых случаях лучше не делать повтора даже если шанс успеха при повторе велик. Потому что некоторые операции должны выполняться с шансом 100.000%. И если произошла даже одна случайная ошибка, то у нас что-то очень! не так.
3. Abort. Подходит для серьёзных ошибок. В случае возникновения такой ошибки программа полностью прекращает свою работу и ждёт, пока всё починят. Главный недостаток тут в том, что пока не придёт человек, процесс работы останавливается. Это может быть нежелательно. Поэтому для серьёзных ошибок, при которых невозможно продолжение, но полностью перестать работать нельзя, возможен ещё один вариант.
3a. Имитация работы. В этом случае текущая операция безусловно прерывается, так же как и при Abort, но программа продолжает работу в упрощённом режиме. Пользователи оповещены о проблеме, но все подключённые устройства думают, что всё работает. Вместо проблемных участков кода вызываются заглушки. Функции, не взывающие ошибок, работают штатно. Когда появляется шанс, что ошибка ушла, заглушки заменяются на нормальные операции.