首页 > 解决方案 > Ruby 异常的语法

问题描述

我试图理解 Ruby 异常的语法。

我找到了这个例子:

begin
    puts "Running with b=#{ b }"
    exception_if(b)
    puts "After possible exception"
  rescue ArgumentError => e
    puts "An error occured: #{ e }!"
  ensure
    puts "Always excuted, no matter what."
  end

资料来源:维基书籍

"ArgumentError" 是期望类型,救援分支应该捕获哪个?“e”是参考变量?

我就在吗?

然后我发现了这个片段,这让我完全困惑:

begin
  @product = Product.find(params[:id])
rescue => e
  redirect_to root_path
end

箭头 (=>) 之前的第一部分在哪里?

有人可以解释一下,这两个片段是什么意思吗?

标签: ruby-on-railsruby

解决方案


编辑:第二个片段是在控制台中拯救作为 , 实例的错误:StandardError

begin
  raise NoMethodError
rescue => e
  puts e.inspect
end
#<NoMethodError: NoMethodError>

异常对象被分配给e变量。这也可以读

rescue StandardError => e

第一个片段最初是rescue一个特定的错误,如果引发另一种类型的错误,ensure则将始终执行该块,然后退出该方法。

作为一般经验法则,您应该只捕获程序可以从中恢复的异常。如果程序遇到未知异常崩溃并修复问题。


推荐阅读