Как остановить цикл, вне цикла?

Таким образом, у меня есть цикл for, который что-то делает, и я должен сделать оператор try-Кроме выше (используется при открытии файла, исключение, если файл не найден), однако я получаю синтаксическую ошибку с циклом for ниже это (хотя это дает мне сообщение об исключении, когда я выбираю неправильный файл). Как я мог остановить программу от запуска цикла после того, как я получил исключение?

Я думаю, что использование 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 ответа

Ну, вам нужно решить, что вы хотите, если файл не найден.

Вы можете просто вернуться из функции:

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 возвращается
  • Если цикл не находит совпадений, пустой список [] возвращается
  • В противном случае список результатов возвращается.

Использовать 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  
...

Я предполагаю, что вы хотите выйти из функции, если файл неправильный. Тогда это будет сделано:

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

Из того, что я понимаю по вашему вопросу, каждый раз, когда вы нажимаете исключение, вы устанавливаете flag переменная к 1 (или же true). Тогда просто окутай loop вокруг if-statement - if flag установлен, то не выполняйте loopв противном случае выполните его.

В качестве альтернативы, если вам (по какой-то причине) необходимо войти в цикл, вы можете выбрать if clause внутри цикла и использовать break оператор, чтобы выйти из цикла или выйти из него.

Дополнительная информация об операторе break в python и пример его использования в цикле.

Другие вопросы по тегам