使用Rescue检索导致错误的方法

时间:2017-01-10 16:30:05

标签: ruby-on-rails ruby rescue

我们假设您有以下示例代码块:

  def next_page(next_token)
    client.list_order_items_by_next_token(next_token)
  rescue => error
    binding.pry
  end

如果没有深入探讨此救援是否捕获所有错误以及错误(此块已被修改)的问题,有没有办法确定导致问题的方法list_order_items_by_next_token?我知道堆栈跟踪可用,但感觉不对。

1 个答案:

答案 0 :(得分:0)

只需使用

error.backtrace

不要担心表现。

当您挽救异常时,已经发生了创建回溯的成本。引发异常时会创建回溯。它很贵!每当引发异常时,Ruby都必须创建O(N)个新字符串,其中N是堆栈跟踪的深度。在常见的Rails应用程序中可以是1000+。它在循环中变得更糟。所有这些字符串通常都不会被使用,只会阻塞垃圾回收。在我们的生产系统中,这些回溯字符串是性能下降的主要原因之一。但正如我所说,当引发异常时会产生成本,以后访问回溯是免费的。