Никто не заставляет вас спасать исключения. Вы можете позволить этому гореть, если хотите, и в некоторых ситуациях это совершенно жизнеспособная стратегия. Иногда лучше взломать sh, чем запутаться и продолжить, как будто ничего плохого не произошло.
В системах, где регистрируются исключения и процесс автоматически перезапускается, это может быть путь к go.
Последнее, что вы хотите сделать, это замять rescue
, который не делает ничего, кроме неясных проблем или, что еще хуже, оставляет систему в нестабильном или нерабочем состоянии. Это эквивалентно отключению пожарной сигнализации, потому что она раздражает и время от времени издает звуковой сигнал. Однажды вам это понадобится, потому что происходит что-то серьезное.
В большинстве случаев исключения сообщают о чем-то полезном, они не являются неприятностью. Например:
class ConfigDataError < StandardError
# Defines a custom exception class
end
def config_data(path)
YAML.load(File.open(path))
rescue Errno::ENOENT
# File is missing, no big deal.
{ }
rescue Psych::SyntaxError
# This is a problem!
raise ConfigDataError, "Invalid YAML in file #{path}"
end
Где вы можете указать определенные виды ожидаемых исключений, а также возможность повторно вызывать другие исключения как новый тип.