我编写的脚本在启动时运行并要求设置一个环境变量,但Ruby的Exceptions哪个最好?我使用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
答案 0 :(得分:12)
您可以执行以下操作:
ENV['SECRET_KEY_XXYY'] || raise('no SECRET_KEY_XXYY provided')
答案 1 :(得分:7)
根据documentation for LoadError,当'require'出现问题时应该使用{{3}}。我认为更合适的方法是将StandardError
子类化,并制作一个适合您使用的方法。如果这看起来有点多,我会跟StandardError
一起使用描述性消息。
答案 2 :(得分: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'])
答案 3 :(得分:2)
http://bugs.ruby-lang.org/projects/ruby/wiki/ExceptionClassesDoc
上有一个例外类型列表我可能会选择ArgumentError,因为你说ENV['FOO']
的值不是你预期的值。
答案 4 :(得分:1)
可以使用ENV.fetch('FOO'),如果找不到,则会引发KeyError。