在Ruby(on Rails)中从哪里开始救援



当我写ruby或(rails(时,我应该在哪里写beginrescue关于http请求(或者只是一般来说,从哪里开始救援(?

我说的是控制器、模型或模块。

例如,我写了这样的代码。

module

module WhateverModule
def get_list
http, uri_path, headers = set_request("whatever_api_url")
http.get(uri_path, headers)
end
#codes continue below
end

然后,我经常把beginrescue代码放在控制器上。

controller

begin
api_list = get_list
rescue => exception
# do whatever I need to do to handle exceptions
p "exception happened!"
end

但我的公关评论家一直在说";你应该写这样的代码&";

module

module WhateverModule
def get_list
http, uri_path, headers = set_request("whatever_api_url")

begin
http.get(uri_path, headers)
rescue => exception
p "exception happend!"
end
end
#codes continue below
end

我的问题是,哪一个是正确的(还是干净的或更好的(?关于beginrescue放在哪里,有什么普遍的共识吗?

感谢

我认为,当使用rescue块时,遵循两个准则是一种常见的模式:

  1. 只将rescue块放在尽可能少的行数周围。通常,这应该只有一行。这当然取决于您的代码,但通常情况下,特定方法会引发异常。如果可能的话,rescue块应该仅在该块周围。这使得调试和重构更加容易
  2. 当添加rescue块时,请精确地命名那些期望发生的异常。否则,您可能会遇到意想不到的错误(语法错误或nil上的方法调用(。这又让调试变得更加困难

在你的例子中,我同意PR审查员的意见,但我会添加可能发生的、我想处理的特定异常。例如:

def get_list
http, uri_path, headers = set_request("whatever_api_url")
begin
http.get(uri_path, headers)
rescue Net::HTTPNotFound => e
# handle page not found
rescue Net::HTTPForbidden => e
# handle invalid credentials
rescue Net::HTTPServerError, Net::HTTPServerException
# handle server error
end
end

当然,如何处理异常以及这是否可能取决于您的应用程序。因此,没有硬性规定,只有指导方针。

相关内容

  • 没有找到相关文章

最新更新