2013-11-01 87 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