2015-01-15 69 views
0

我期待重新開始迭代,如果我收到異常。 (...它正在從服務器讀取數據,偶爾會得到間歇性的錯誤代碼,不會在重試時重複)。在Python中重新啓動for循環的迭代

with open(input, 'rb') as f: 
    r = unicodecsv.reader(f) 

for row in r: 

    code to request some data from server 

    if response_code == 200: 
     code to process response 
    else: 
     want to restart the iteration for the current row 

如果我使用的是while循環,這樣的事情顯然是明顯的(如不增加的數量),但考慮到我遍歷行中的for循環,想不到的一種強制重做當前迭代的方式。

雖然有很多發音相似的題目的帖子(如how to restart "for" loop in python ?Python - Way to restart a for loop, similar to "continue" for while loops?python: restarting a loop),每個我發現/讀的那些似乎得到的東西不同(例如只是如何重新啓動時到達終點,而不是如果發生某種情況,重新開始迭代)。

[Python 2.7版]

+0

你不能倒帶的迭代for循環,因爲for循環遍歷的[迭代器] (https://docs.python.org/3/glossary.html#term-iterator)。迭代器只能前進到下一個位置。像你在你的問題中說的那樣使用while循環有什麼問題? – iCodez 2015-01-15 17:18:36

+0

爲什麼有一段時間沒有選擇? – 2015-01-15 17:23:35

+0

@iCodez和Padraic--已經看到用for循環(我認爲會出現這種情況)沒有辦法輕鬆做到這一點,最簡單的答案可能是切換到一段時間(...只是一點點更復雜/不像希望那樣整齊,但仍可能是最好的解決方案) – kyrenia 2015-01-15 17:27:02

回答

7

您可以添加第二個循環,像這樣:

for row in r: 
    while True: 
     do stuff 
     if error: 
      continue 
     else: 
      break 
+0

我不明白這個邏輯。假設我們在第一行,我們進入while循環。接下來做的東西,在這種情況下有一個錯誤。我們繼續,這將我們帶到while循環的下一個迭代。沒有什麼改變,我們繼續在第一行做東西,每次都會出錯。這不會重置循環外部。 – Mike 2015-01-15 17:37:01

+2

它不應該推進外部循環。 OP正在聯繫服務器 - 如果發生網絡錯誤,則必須再次聯繫服務器。 – 2015-01-15 17:41:47