Ruby救援语法错误

Posted

技术标签:

【中文标题】Ruby救援语法错误【英文标题】:Ruby rescue syntax error 【发布时间】:2013-08-31 16:50:50 【问题描述】:

我有以下代码行给我一个错误:

rescue Timeout::Error => e
    logs.puts("Rescued a timeout error...#e")
    email_ids_all.each do |email_delete|

      call= "/api/v2/emails/#email_delete/"
      uri= HTTParty.delete("https://www.surveys.com#call",
          :basic_auth => auth,
          :headers =>  'ContentType' => 'application/x-www-form-urlencoded', 'Content-Length' => "0" 
      )
      puts "Deleted email #email_delete".green
      log.puts("Deleted email #email_delete")
    end
    abort #abort entire script after deleting emails
  end

我收到的错误是这样的:

syntax error, unexpected keyword_rescue, expecting $end
  rescue Timeout::Error => e
        ^

基本上我只是在脚本超时时尝试运行 API 删除调用。尽管我在rescue 的块中放了什么似乎并不重要,但我收到了同样的错误。我在 rescue 方法上的语法有什么问题?

【问题讨论】:

显然你没有 begin 在适当的地方。除非您粘贴所有代码,否则我不能确切地说。 也许答案是我根本没有begin。这是整个代码... 我添加了开始并且脚本工作正常 - 不知道为什么不赞成,但感谢您的帮助。随时发表您的评论作为答案,我会给您信用。 【参考方案1】:

rescue的使用格式如下:

begin
  # Code you want to run that might raise exceptions
rescue YourExceptionClass => e
  # Code that runs in the case of YourExceptionClass
rescue ADifferentError => e
  # Code that runs in the case of ADifferentError
else
  # Code that runs if there was no error
ensure
  # Code that always runs at the end regardless of whether or not there was an error
end

这是一个包含更多信息的问题:Begin, Rescue and Ensure in Ruby?。

【讨论】:

很有意义-感谢您的解释,我只是错过了begin 部分。 @LeviStanley 值得注意的是,如果您想拯救所有方法代码,则不需要 begin 关键字。 你的意思是隐式异常块(比如定义方法时)或其他什么? @LeviStanley 是的,我的意思是隐式异常块。 @MarekLipka 我添加了另一个问题的链接;它包含更多信息,包括提及隐式异常块。

以上是关于Ruby救援语法错误的主要内容,如果未能解决你的问题,请参考以下文章

每当我使用gem命令时,为什么Ruby会抛出语法错误?

Ruby ActiveRecord 组和“AS”处或附近的平均“语法错误”

语法Ruby中“引导自定义表单”代码中的错误

开始救援没有发现错误

语法错误,意外 ')',期待 '='

Ruby Print Inject Do 语法