【问题标题】:how to stop a loop, outside of the loop?如何在循环之外停止循环?
【发布时间】:2012-05-20 16:10:10
【问题描述】:

所以我有一个执行某些操作的 for 循环,并且我需要在上面创建一个 try-except 语句(用于打开文件,如果找不到文件则异常),但是我得到一个语法错误它下面的 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 循环给了我一个错误。

【问题讨论】:

  • 如果您希望我们找出问题所在,您需要发布代码(将其复制到您的问题中,突出显示并按 Ctrl-K)。
  • 是的,请粘贴代码...听起来您需要在 while 循环中添加一行来搜索该错误。一旦找到它,你就从内部打破循环。
  • 顺便说一句,Python 根据PEP-8 使用 4 个缩进字符。
  • 他不是唯一一个使用两个空格公开蔑视 PEP-8 的人。

标签: python loops try-catch except


【解决方案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
  • 如果循环没有找到任何匹配项,则返回一个空列表[]
  • 否则,返回结果列表。

【讨论】:

    【解决方案2】:

    根据我对您的问题的了解,每次遇到异常时,您都会将 flag 变量设置为 1(或 true)。然后简单地将loop 包裹在if-statement - if 周围,flag 已设置,然后不要执行loop,否则,执行它。

    或者,如果您(出于某种原因)确实需要进入循环,那么您可以选择将if clause 放入循环中并使用break 语句来跳出或退出循环。

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

    【讨论】:

      【解决方案3】:

      在循环中使用break while on except,以摆脱它。

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

      【讨论】:

        【解决方案4】:

        如果文件错误,我猜你想退出函数。然后就可以了:

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

        【讨论】:

        • 虽然我不明白为什么返回结束它?而break没有?
        • break 中止正在运行的 forwhile 循环。 return 用于退出函数。
        猜你喜欢
        • 1970-01-01
        • 2022-01-11
        • 1970-01-01
        • 2018-09-07
        • 2018-05-13
        • 1970-01-01
        • 2017-08-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多