如何忽略错误并继续脚本的其余部分(How to ignore error and continue

2019-10-18 16:06发布

一些背景。 我想删除AWS红移集群,这一过程需要超过30分。 所以,这就是我想做的事:

  1. 启动删除
  2. 每1分钟,确认集群的状态(这应该是“删除”)
  3. 当集群被删除,该命令会失败(因为它无法找到群集了)。 所以记录一些信息,并继续与脚本的休息

这是我在一个运行命令while循环来确认集群的状态后,我开始删除:

resp = redshift.client.describe_clusters(:cluster_identifier=>"blahblahblah")

上面的命令将让我群集状态为deleting ,同时删除过程继续。 但是,一旦集群被完全删除,那么该命令本身会因为找不到集群失败blahblahblah

下面是命令的错误,一旦集群被删除:

/var/lib/gems/1.9.1/gems/aws-sdk-1.14.1/lib/aws/core/client.rb:366:in `return_or_raise': Cluster blahblahblah not found. (AWS::Redshift::Errors::ClusterNotFound)

我同意这种错误。 但是,这让我的脚本退出突然。 所以,我想记录一个消息,说The cluster is deleted....continuing ,并继续我的脚本。

我想下面的设置

resp = redshift.client.describe_clusters(:cluster_identifier=>"blahblahblah")
 || raise (“The cluster is deleted....continuing”)

我也试过夫妇在提到建议的https://www.ruby-forum.com/topic/133876但是,这是行不通的。 上面的命令无法找到群集我退出脚本一次。

问题 :如何忽略错误,打印自己的消息,说“群集被删除....继续”,并继续执行脚本?

谢谢。

Answer 1:

def delete_clusters clusters=[]
  cluster.each do |target_cluster|
    puts "will delete #{target_clust}"

    begin 
      while (some_condition) do
        resp = redshift.client.describe_clusters(:cluster_identifier => target_clust)
        # break condition
      end
    rescue AWS::Redshift::Errors::ClusterNotFound => cluster_exception
      raise ("The cluster, #{target_clust} (#{cluster_excption.id}), is deleted....continuing")
    end

    puts "doing other things now"
    # ....
  end
end


Answer 2:

@NewAlexandria,我改变你的代码看起来像下面:

puts "Checking the cluster status"
begin
  resp = redshift.client.describe_clusters(:cluster_identifier=>"blahblahblah")
rescue AWS::Redshift::Errors::ClusterNotFound => cluster_exception
  puts "The cluster is deleted....continuing"
end
puts "seems like the cluster is deleted and does not exist"

OUTPUT:

Checking the cluster status
The cluster is deleted....continuing
seems like the cluster is deleted and does not exist

我改变了raise ,以puts于紧随行rescue在响应行。 这样,我摆脱了的RuntimeError ,我在我的评论中提到的上方。

我不知道这有什么寓意。 我甚至不知道这是否是做正确的方式。 但它表明,当集群没有发现错误,然后用脚本将继续。

后来我读了很多关于红宝石文章exception/rescue/raise/throw ....但那只是太多,我听不懂,因为我不属于编程背景的。 所以,如果你能解释这是怎么回事,这将非常有帮助,我得到的红宝石更多的信心。

谢谢你的时间。



文章来源: How to ignore error and continue with rest of the script