8

私が書いたスクリプトは起動時に実行され、環境変数を設定する必要がありますが、Rubyの例外のどれが最適ですか?私は使用LoadErrorしました、私はできるだけ説明的であり、適切な規則に従いたいと思っています。

次に、長さをチェックする以外に環境変数が設定されているかどうかを確認する別の方法を見つけることができませんが、それはそれほどエレガントではないようです。

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
4

5 に答える 5

14

あなたは次のようなことをすることができます:

ENV['SECRET_KEY_XXYY'] || raise('no SECRET_KEY_XXYY provided')
于 2014-02-05T23:15:45.423 に答える
8

'require'に問題がある場合に使用されることになっているLoadErrorのドキュメントによると。より適切な方法は、サブクラスStandardError化して、用途に合ったものを作成することだと思います。それが少し多いように思われる場合はStandardError、説明的なメッセージを使用します。

于 2012-08-12T01:04:32.893 に答える
3

独自の例外を作成するのは簡単です。

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'])
于 2012-08-12T03:55:35.747 に答える
2

http://bugs.ruby-lang.org/projects/ruby/wiki/ExceptionClassesDocに例外タイプのリストがあります

ENV['FOO']の値が期待したものではないと言っているので、おそらくArgumentErrorを選択します。

于 2012-08-12T23:20:39.193 に答える
2

ENV.fetch('FOO')を使用すると、見つからない場合にKeyErrorが発生します。

于 2019-12-17T19:32:04.683 に答える