2012-08-12 2 views
6

Сценарий, который я написал, запускается при запуске и требует, чтобы была задана переменная окружения, но какая из них имеет размер Exceptions? Я использовал LoadError, я просто хочу быть максимально описательным и следовать соответствующим соглашениям.Ruby, какое исключение лучше всего обрабатывать отключенные переменные среды?

Во-вторых, я не могу найти другой способ проверить, установлена ​​ли переменная окружения, кроме проверки ее длины, но это не кажется таким изящным.

begin 
    raise LoadError if ENV['FOO'].to_s.length == 0 
    system "open http://example.com/" + ENV['FOO'] 
rescue Exception => e 
    puts "=> #{e} FOO environment variable not set" 
end 
+0

какой-либо причине, чтобы не просто написать собственное исключение? – muffinista

+0

Потому что я предпочел бы следовать конвенции, которая более популярна, если она доступна для меня. –

ответ

6

Согласно documentation for LoadError, который должен быть использован для того, когда «требуется» есть проблема. Я думаю, что более правильным способом будет подкласс StandardError и сделать тот, который подходит вам. Если это кажется немного, я бы просто пошел с StandardError с описательным сообщением.

2

Создание собственных исключений легко:

MyError = Class.new(StandardError) 
raise MyError, "FOO environment variable not set" unless ENV['FOO'] 
system "open http://example.com/" + ENV['FOO'] 

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

system("open http://example.com/" + ENV['FOO']) if ENV['FOO'] 

или

ENV['FOO'] && system("open http://example.com/" + ENV['FOO']) 
12

Вы можете сделать что-то вроде:

ENV['SECRET_KEY_XXYY'] || raise('no SECRET_KEY_XXYY provided') 
+1

Мне нравится простота этого, спасибо! –

Смежные вопросы