如何同时捕获不同的错误类型?

时间:2017-08-28 22:45:56

标签: ruby error-handling

我有以下代码可以帮助我在处理网址时捕获重定向错误。

begin
  page = Nokogiri::HTML(uri.open(redirect: false))
rescue OpenURI::HTTPRedirect => redirect
  uri = redirect.uri
  puts "retry #{tries}: #{uri}"
  retry if (tries-=1) > 0
  raise

它适用于URL重定向错误,但它不会捕获任何其他类型的错误。例如,一个URL引发了416错误,该错误无法由上述代码处理。

我可以用

rescue StandardError => e

捕获416错误并跳过我正在处理的URL,但是如何同时捕获这两个错误,以便在出现重定向错误时,代码知道重定向的位置,以及何时存在其他类型的错误错误,代码知道何时跳过?

1 个答案:

答案 0 :(得分:4)

只需要进行另一次救援。你可以根据需要加入。

begin
  page = Nokogiri::HTML(uri.open(redirect: false))
rescue OpenURI::HTTPRedirect => redirect
  uri = redirect.uri
  puts "retry #{tries}: #{uri}"
  retry if (tries-=1) > 0
  raise
rescue OtherError => e
  # do something