开发者

In Ruby, What structures can a `rescue` statement be nested in

开发者 https://www.devze.com 2022-12-24 01:57 出处:网络
In ruby to catch an error one uses the rescue statement.generally this statement occurs between begin and end. O开发者_如何学Pythonne can also use a rescue statement as part of a block (do ... end) or

In ruby to catch an error one uses the rescue statement. generally this statement occurs between begin and end. O开发者_如何学Pythonne can also use a rescue statement as part of a block (do ... end) or a method (def ... end). My question is what other structures (loop, while, if, ...) if any will rescue nest within?


You can only use rescue in two cases:

  • Within a begin ... end block

    begin
      raise
    rescue 
      nil
    end
    
  • As a statement modifier

    i = raise rescue nil
    

Function, module, and class bodies (thanks Jörg) are implicit begin...end blocks, so you can rescue within any function without an explicit begin/end.

    def foo
      raise
    rescue
      nil
    end

The block form takes an optional list of parameters, specifying which exceptions (and descendants) to rescue:

    begin
      eval string
    rescue SyntaxError, NameError => boom
      print "String doesn't compile: " + boom
    rescue StandardError => bang
      print "Error running script: " + bang
    end

If called inline as a statement modifier, or without argument within a begin/end block, rescue will catch StandardError and its descendants.

Here's the 1.9 documentation on rescue.


As said in recent comment, response has changed since Ruby 2.5.

do ... end blocks are now implicit begin ... end blocks; like module, class and method bodies.

In-line blocks {...} still can't.

0

精彩评论

暂无评论...
验证码 换一张
取 消