2014-07-02 93 views
-1

我正在處理代碼,但我不太確定當涉及try-except塊時,代碼是如何精確流經循環的。代碼如下:循環流,除嘗試塊外

while len(usernames)>0: 
    for username in usernames: 
     while current_count<aimed_count: 
      try: 
       """processing stuff""" 
      except error: 
       if: 
        if: 
         #handle it 
        else: 
         usernames.remove(username) 
       else: 
        usernames.remove(username) 
    usernames.remove(username) 

現在,如果我抓住通過進入一個錯誤兩者如果在錯誤語句塊,我想我的代碼繼續回到try塊的開始,我相信它(希望如此沒有問題)。如果我捕獲到except塊中的其他語句的錯誤,則代碼將無法返回嘗試阻止,因爲用戶名不再存在。那麼,如何確保代碼在這兩種情況下的第一個while循環中開始?我應該在兩個陳述之後放置一個break語句嗎?

+0

try/except無關緊要,重要的是不要更改正在迭代的列表。 – RemcoGerlich

回答

0

是的,只是在那裏休息一下。這將終止當前循環。

有繼續,這將使它進入下一個迭代相結合,你可以使它看起來有點清潔劑這樣的:

while len(usernames)>0: 
    for username in usernames: 
     while current_count<aimed_count: 
      try: 
       """processing stuff""" 
      except error: 
       if: 
        #handle it 
        continue 
       break 

我刪除從當前列表中刪除用戶名的行。看來你想在遍歷它後完全清空列表。在這種情況下,您可以在循環完成後立即執行該操作。

+0

我不一定要清空用戶名列表,所以我只是從我的代碼中刪除了第一個while循環,並將整個塊縮小一次。我想確保我正確地理解了這一點:現在,如果我捕捉到一個特定的錯誤,它將在處理它之後繼續到while循環的開始。對於遇到的任何其他錯誤,它會跳出代碼,返回for語句並啓動列表中下一個用戶名的過程。我的理解是否正確? – user3303613

+0

是的,這正確地描述了我的代碼片段。 – wvdz