首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Begin和Rescue块异常处理

Begin和Rescue块异常处理
EN

Stack Overflow用户
提问于 2013-04-24 23:12:03
回答 2查看 5.4K关注 0票数 2

我在rails异常处理方面几乎没有经验。我有一个片段

代码语言:javascript
复制
def update
  @game = Game.find(params[:id])
  begin
    params[:game][:tier] = eval(params[:game][:tier]) 
  rescue 
    @game.errors.add(:tier, "Please make sure the correct format for tier, example [100, 1000, 10000]")
  end
#.... more code
end

如果params:game = "100,200“,一切都很完美。如果出现像params:game =“100,200abc”这样的ruby语法错误,它会捕获错误,但是应用程序会崩溃。

我如何处理'eval()‘的异常,这样它就不会破坏应用程序了?为什么开始和救援在这种情况下不起作用?感谢大家对ruby启蒙的帮助,谢谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-24 23:19:59

如果params[:game][:tier]"[100,200]; system('rm -rf /')"呢?

由于传入的数据应该是一个数组,所以我不会使用eval,而是使用JSON.parse

代码语言:javascript
复制
> JSON.parse("[100,200]")
 => [100, 200]
> JSON.parse("[100,200] abc")
JSON::ParserError: 746: unexpected token at 'abc'...

然后从JSON::ParserError异常中解救出来

代码语言:javascript
复制
rescue JSON::ParserError => e

这也将解决没有捕捉到你所遇到的异常问题的救援。

票数 4
EN

Stack Overflow用户

发布于 2013-04-24 23:19:31

this的副本

然而,你应该用这种方式来拯救

代码语言:javascript
复制
def update
  @game = Game.find(params[:id])
  begin
    params[:game][:tier] = eval(params[:game][:tier]) 
  rescue Exception => e
    @game.errors.add(:tier, "Please make sure the correct format for tier, example [100, 1000, 10000]")
  end
#.... more code

结束

为了让它工作

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16195663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档