【发布时间】:2012-06-29 05:21:28
【问题描述】:
有没有办法在 ruby 中执行旧的“on error resume next”例程?
我从其他地方动态填充了一组值(准确地说是从 MQTT 主题中读取),然后我想对它们进行一堆数值计算并发布结果。这些值应该是数字,但可能是缺失的或非数字的。
目前我的代码看起来像
values=[]
//values get loaded here
begin
Publish('topic1',value[0]*10+value[1])
rescue TypeError,NoMethodError,ZeroDivisionError
end
begin
Publish('topic2',value[3]/value[4])
rescue TypeError,NoMethodError,ZeroDivisionError
end
//etc etc
如果由于任何原因计算失败,程序应该跳过该步骤并继续。
它有效,但肯定有比所有相同的 begin..rescue 块更好的方法吗?毕竟,Ruby 是关于“DRY”的。
有没有办法重写上面的内容,以便使用单个 begin..rescue 构造,同时仍然允许尝试所有计算?
更新
做这样的事情有多安全
def safe_Publish(topic,value)
return if value.nil?
Publish(topic,value)
end
并调用 safe_Publish('topic2',(value[3]/value[4] rescue nil))
主要问题是上面捕获了所有异常,而不仅仅是我期望的异常,这让我有点紧张。
【问题讨论】:
标签: ruby