在ruby中,使用rescue语句捕捉错误.一般来说,这种说法出现在beginend之间.还可以使用rescue语句作为块(do ... end)或方法(def ... end)的一部分.我的问题是其他什么 struct (循环、while、if…)如果有的话,你会在里面营救鸟巢吗?

推荐答案

您只能在两种情况下使用rescue:

  • begin ... end个街区以内

    begin
      raise
    rescue 
      nil
    end
    
  • 作为语句修饰符

    i = raise rescue nil
    

函数、模块和类主体(感谢Jörg)是隐式的begin...end个块,因此您可以在任何函数中进行解救,而无需显式的begin/end.

    def foo
      raise
    rescue
      nil
    end

块形式采用可选的参数列表,指定哪些异常(和子体)为rescue:

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

如果作为语句修饰符内联调用,或者在begin/end块中没有参数,rescue将捕获StandardError and its descendants.

这是1.9 documentation on rescue美元.

Ruby相关问答推荐

扫描不带空格的字符串中的单词

PDFNet:Ubuntu 16.04 和 Ubuntu 20.04 上 PDF 输出文本的词序不同

指南针手表:未定义的方法存在吗?对于文件:类

用函数组合枚举器的Ruby方法

如何在 Ruby 中验证来自多项 Select 提示的命令行输入?

如何判断一个对象在 Ruby 中是否可迭代?

Kernel#gets try 读取文件而不是标准输入

如何使用 RVM 重新编译 ruby​​?

您如何将 Cucumber 场景标记为待处理

Ruby 中的 Object 和 BasicObject 有什么区别?

如何在运行时判断 Ruby 中的 Gem 版本?

`respond_to?` 与 `respond_to_missing?`

从类对象获取类位置

我应该如何在哈希上使用 each_with_object?

为什么 Ruby 没有真正的 StringBuffer 或 StringIO?

如何理解 strptime 与 strftime

何时使用在 Ruby 中启动子进程的每种方法

遍历数组的前 n 个元素

要散列的散列数组

Ruby中的字符串和符号有什么区别?