Как обращаться со специальными ситуациями
Априорная проверка: до выполнения операции проверяйте возможность ее применения.
Апостериорная проверка: выполните операцию, затем запросите атрибут для выяснения того, как она сработала.
Когда все рушится, используйте обработку исключений.
Организованный отказ: если в конце выполняется предложение rescue, не забудьте восстановить инвариант. Вызывающая программа получит также исключение.
Повторение выполнения: испробуйте другой алгоритм или (стратегия надежды) тот же повторно. Сохраните информацию в атрибутах или локальных сущностях, инициализируемых в момент вызова, но не при повторах retry.