ruby-on-rails - 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
箭头 (=>) 之前的第一部分在哪里?
有人可以解释一下,这两个片段是什么意思吗?
解决方案
编辑:第二个片段是在控制台中拯救作为 , 实例的错误:StandardError
begin
raise NoMethodError
rescue => e
puts e.inspect
end
#<NoMethodError: NoMethodError>
异常对象被分配给e
变量。这也可以读
rescue StandardError => e
第一个片段最初是rescue
一个特定的错误,如果引发另一种类型的错误,ensure
则将始终执行该块,然后退出该方法。
作为一般经验法则,您应该只捕获程序可以从中恢复的异常。如果程序遇到未知异常崩溃并修复问题。
推荐阅读
- mysql - 如何在mysql中的表中添加额外的行插入表选择?
- c# - C# MS Chart 获取系列颜色
- go - 如何在 Heroku 上正确安装 cloud-torrent
- laravel-backpack - 如何在背包换laravel中向ckeditor添加选项
- python - 无法使用 Python 脚本远程登录 Cisco 路由器
- javascript - vue中的v-bind是什么
- react-native - 世博会应用程序 - 无法加载带有消息的项目:这比它应该花费的时间要长得多
- python - 如何在谷歌 Colab 中运行脚本 shell?
- android - 如何让 AdMob 真实广告在 Android 应用上运行
- selenium - Selenium - NoClassDefFoundError: org/openqa/selenium/NoAlertPresentException