2012-08-12 8 views
6

Das Skript, das ich geschrieben habe, läuft beim Start und erfordert, dass eine Umgebungsvariable gesetzt wird, aber welche von Rubys Exceptions, ist am besten? Ich habe LoadError verwendet, ich möchte nur so beschreibend wie möglich sein und den richtigen Konventionen folgen.Ruby, welche Ausnahme eignet sich am besten zur Verarbeitung nicht gesetzter Umgebungsvariablen?

Zweitens kann ich keinen anderen Weg finden zu sehen, ob eine Umgebungsvariable neben der Überprüfung der Länge gesetzt ist, aber das scheint nicht so elegant.

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

ein Grund, Ihre eigene Ausnahme nicht nur schreiben? – muffinista

+0

Weil ich lieber einer Konvention folge, die beliebter ist, wenn sie mir zur Verfügung steht. –

Antwort

6

Nach dem documentation for LoadError, die für, wenn ein ‚require‘ verwendet werden soll ist ein Problem aufgetreten. Ich denke, die angemessenere Methode wäre, StandardError zu untergliedern und eine zu machen, die zu Ihrer Verwendung passt. Wenn das ein bisschen zu viel scheint, würde ich einfach mit StandardError mit einer beschreibenden Nachricht gehen.

2

Ihre eigenen Ausnahmen durchzuführen ist einfach:

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

Fangen die Ausnahme in diesem Codeblock in diesem Fall nicht angemessen sein kann, da es Ihnen scheint drucken einfach eine Nachricht mit. In der Regel sollten Sie niemals eine Ausnahme auslösen, wenn Sie nicht bereit sind, das Programm zu beenden. Mit anderen Worten, vermeiden Sie Ausnahmen für erwartete Bedingungen. Wenn das Programm ohne FOO fortsetzen wird, wäre es besser, einfach die Ausführung des Systems Anweisung abhängig zu machen:

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

oder

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

Sie können so etwas wie tun:

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

Ich mag die Einfachheit, danke! –

Verwandte Themen