为什么我会收到 NoMethodError: undefined method `rescue' for #<Concurrent::Future:...>?

问题描述 投票:0回答:1

Ruby 的 Concurrent::Future 没有捕获异常。因此,我从 article 复制了代码来添加

rescue
块。 但现在我得到了错误:

由NoMethodError引起:#Concurrent::Future:0x0000000124764268的未定义方法“rescue”

这是代码:

executed_future = Concurrent::Future.execute do
            url = "#{endpoint}#{datum[:hierarchy_id]}#{valuation_date}"
            raise StandardError.new("Testing error!") # To test

            [...]
          end.rescue do | exception | # Adding this, will throw the error
            @exceptions << exception
            binding.pry # No activated
          end

我错过了什么?

我希望能够拯救

Concurrent::Future
块中的异常。就像文章一样。

ruby ruby-on-rails-3 rescue
1个回答
0
投票

我不熟悉

Concurrent::Future
,我可能会错过该特定 gem 中存在
rescue
方法的不同实现。

但在 Ruby 中

rescue
不是您调用另一个方法的返回值的方法(就像问题中
Concurrent::Future.execute
调用的返回值)。它是一个关键字,用于捕获当前块上下文中引发的异常。

因此,我会尝试在

begin ... rescue ... end
块中使用惯用的 Ruby
Concurrent::Future.execute
语法:

executed_future = Concurrent::Future.execute do
  begin
    url = "#{endpoint}#{datum[:hierarchy_id]}#{valuation_date}"
    raise StandardError.new("Testing error!") # To test
    # ...
  rescue StandardError => exception
    @exceptions << exception
    binding.pry
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.