簡體   English   中英

開始和救援塊異常處理

[英]Begin and Rescue block exception handling

我在Rails異常處理方面經驗很少。 我有這個片段

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] [:tier] =“ [100,200]”一切就完美了。 如果發生紅寶石語法錯誤,例如params [:game] [:tier] =“ [100,200] abc”,它會捕獲錯誤,但是應用程序會崩潰。

我該如何使用'eval()'處理異常,以免破壞應用程序? 為什么在這種情況下開始而救援不起作用? 感謝任何對紅寶石啟發的幫助,謝謝:)

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

由於預期傳入數據是一個數組,因此我不使用eval而是JSON.parse

> JSON.parse("[100,200]")
 => [100, 200]
> JSON.parse("[100,200] abc")
JSON::ParserError: 746: unexpected token at 'abc'...

然后僅從JSON::ParserError異常進行救援

rescue JSON::ParserError => e

這也將解決無法捕獲您遇到的異常問題的情況。

重復的

但是你應該這樣拯救

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

結束

為了使它起作用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM