2013-11-01 43 views
0

我想调用外部API。我处理四个或更多例外的电话。我应该如何处理长时间的异常处理代码

如果我拨打多个电话,代码会非常快速地增加。我应该为每个处理异常并返回数据的这种调用编写一个包装?

下面是code这个例子(这不是我的)。对user_search的调用之后是异常处理。

注:我没有使用Rails的

begin 
@twitter = Twitter.user_search(name) 
rescue Twitter::Unauthorized 
    puts "Not authorized. Please check the Twitter credentials at the top of the script." 
    break 

rescue Twitter::BadRequest => e 
    puts "Hit rate limit. Continuing scraping at #{e.ratelimit_reset}" 
    sleep e.retry_after 
    retry 

rescue Exception => e 
    puts "Something else went wrong:" 
    puts e.message 
end 

我已经改变了问题的标题。我认为这个问题更多的是如何处理长时间的异常处理代码。在示例代码中,假设我有多个对twitter API的调用,然后是异常处理,看起来异常处理代码会破坏读取执行实际工作的代码。

+0

解释“代码增加非常快”。手段。它变得更快?更多的是写入? –

+0

我的意思是代码行数增加。它变得难以阅读,因为'实际'代码比异常处理少得多。 – nilanjan

+0

你为什么不展示你正在谈论的一些样本?错误的异常处理可能会失控。做得对,它可以非常优雅,但是,如果没有向我们展示你的代码,我们只能想象你写的是什么,这是浪费我们的时间。 “询问代码的问题必须显示对所解决问题的最低限度的理解,包括尝试的解决方案,为什么他们不工作,以及预期的结果,另见:[Stack Overflow question checklist](http://meta.stackexchange。 “关于你编写的代码问题的问题必须在问题本身中描述特定的问题 - 并包含有效的代码以再现它 - 参见http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=156810/stack-overflow-question-checklist)” –

回答

1

围绕一段代码编写你的异常处理程序,这样,如果块中的第一行失败,你很高兴直到块中的最后一行跳过所有代码。

如果异常使处理程序出现的方法的其余部分无效,请考虑让异常冒泡到下一层。不是所有的东西都必须通过你的方法。

通常我发现自己正在编写单行代码的异常处理程序(使用合适的恢复代码),但这不是一个规则。

+0

您是否曾经将异常处理代码移动到包装方法中以使主代码更具可读性 – nilanjan

+0

通常,包装方法意味着更改类的外部API - 即这意味着用户必须以不同的方式调用我的方法,因为我已经改变了内部结构(这有点不合适)。相反(*如果所有这些方法的错误处理都是相同的*)我可能会创建一个私有方法'with_error_handling [do ... end]',该方法需要一个块,我将从每个适当的方法调用该块。所以我想在这种情况下有一种*包装,但不是我通常所说的。 – Gareth