使用 Rescue 检索导致错误的方法
Retrieve method that caused error using 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
?我知道堆栈跟踪可用,但感觉不对。
只需使用
error.backtrace
不用担心性能。
当您挽救异常时,创建回溯的成本已经发生。引发异常时创建回溯。而且很贵! Ruby 必须在引发异常时创建 O(N)
新字符串,其中 N
是堆栈跟踪的深度。在常见的 Rails 应用程序中可以达到 1000+。它在循环中变得更糟。所有这些字符串通常都不会被使用,只会阻塞垃圾收集。在我们的生产系统中,这些回溯字符串是性能下降的主要原因之一。但正如我所说,当引发异常时会产生成本,以后访问回溯是免费的。
假设您有以下示例代码块:
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
?我知道堆栈跟踪可用,但感觉不对。
只需使用
error.backtrace
不用担心性能。
当您挽救异常时,创建回溯的成本已经发生。引发异常时创建回溯。而且很贵! Ruby 必须在引发异常时创建 O(N)
新字符串,其中 N
是堆栈跟踪的深度。在常见的 Rails 应用程序中可以达到 1000+。它在循环中变得更糟。所有这些字符串通常都不会被使用,只会阻塞垃圾收集。在我们的生产系统中,这些回溯字符串是性能下降的主要原因之一。但正如我所说,当引发异常时会产生成本,以后访问回溯是免费的。