2012-05-12 46 views
0

所以我有一個for循環做了一些事情,我需要做一個try-except語句(用於打開文件,異常如果找不到文件),但是我得到一個語法錯誤循環下面(雖然它確實給我的異常信息,當我選擇錯誤的文件)。在發生異常後,如何停止程序運行循環?如何停止循環之外的循環?

我認爲使用break可能與它有關,但不太清楚如何。我一直在想,如果我的例外信息被打印,然後打破或類似的東西。這是有問題的代碼:

def getIngredients(path, basename): 
    ingredient = [] 
    filename = path + '\\' + basename 
    try: 
    file = open(filename, "r") 
    except: 
    printNow("File not found.") 

    for item in file: 
    if item.find("name") > -1: 
     startindex = item.find("name") + 5 
     endindex = item.find("<//name>") - 7 
     ingredients = item[startindex:endindex] 
     ingredient.append(ingredients) 

    del ingredient[0] 
    del ingredient[4] 


    for item in ingredient: 
    printNow(item) 

基本上,因爲我選擇了錯誤的文件,以獲得異常,for循環在其下使用文件給我一個錯誤。

+4

如果您希望我們找出問題所在,您需要發佈代碼(將其複製到您的問題中,突出顯示並按下Ctrl-K)。 –

+0

是的,請粘貼代碼...聽起來像你需要在你的while循環中添加一行來搜索該錯誤。一旦找到它,就從內部打破循環。 –

+0

順便說一下,Python按照[PEP-8](http://www.python.org/dev/peps/pep-0008/)使用了4個縮進字符。 –

回答

0

從我對您的問題的理解中,您每次遇到異常時,都會將flag變量設置爲1(或true)。然後簡單地將loop圍繞if-statement - ifflag設置,然後不執行loop,否則,執行它。或者,如果您(出於某種原因)確實需要輸入循環,則可以選擇在迴路中使用if clause,並使用break語句跳出或退出循環。

有關break statement in python的更多信息,以及如何使用use it within a loop的示例。

0

使用一個break而在except在一個循環中,出來它。

>>> while True: 
...  try: 
...   x = int(raw_input("Please enter a number: ")) 
...  except ValueError: 
...   print "Oops! That was no valid number. Try again..." 
...   break 
... 
0

我猜你想退出函數,如果該文件是錯誤的。那麼這將做到這一點:

except: 
    printNow("File not found.") 
    return 
+0

是的,它做到了,謝謝! – user1390754

+0

雖然我不明白爲什麼回報結束了嗎?並打破不? – user1390754

+0

'break'中止正在運行的'for'或'while'循環。 'return'用於退出函數。 –

1

好,需要決定你想,如果沒有找到該文件,發生什麼。

您可以選擇簡單地從函數返回:

def getIngredients(path, basename): 
    ingredient = [] 
    filename = path + '\\' + basename 
    try: 
     file = open(filename, "r") 
    except IOError:     # Never use a bare "except"! Be specific! 
     printNow("File not found.") 
     return 

    for item in file: 
     ... 

    return ingredient 

這樣,主叫方可以從功能返回值是否成功完成檢查(如果該事項):

  • 如果循環運行前發生錯誤,返回None
  • 如果循環未找到任何匹配項,則返回空列表[]
  • 否則,返回結果列表。