【问题标题】:for loop over list break and continuefor 循环列表中断并继续
【发布时间】:2015-05-03 18:49:16
【问题描述】:

正确指定问题:我为混淆表示歉意 对尽早从循环中中断存有疑虑。 我有文件夹 - 1995,1996 到 2014 。每个文件夹都有 xml 文件。在某些 xml 文件中,条目 - MaxAmdLetterDate 为无。 我想继续文件夹中的下一个文件,而不是现在使用 break ,程序执行会转到下一个文件夹并在遇到中断时跳过该文件夹中的所有文件 这是代码

import xml.etree.ElementTree as ET
import os
for yrcnt in range(1995,2015):
    old= old="./old/"+ str(yrcnt)
    for dirpath, subdirs, files in os.walk(old): #folder name in which subfolder>files are present
        print files
        for filename in files:
            if filename.endswith(".xml") == True:
                fl=filename
                print fl
                print "-----Reading current file -------"  + str(fl)
                flnm=str(dirpath)+"/"+str(filename)
                tree1 = ET.parse(flnm)                        #db on system
                root1 = tree1.getroot()
                for ch1 in root1.findall('Award'):
                    aid1 = ch1.find('AwardID').text
                    maxdate1=ch1.find('MaxAmdLetterDate').text
                    print "Max amd date : "+str(maxdate1)
            if maxdate1==None:
                break

感谢您的帮助。

原帖: 我的 for 循环在遇到 break 时提前退出。有什么补救措施吗?

files=[1,2,3,4,5]
for filename in files:
  print filename
  if filename==3:
     break

o/p:

  1
  2
  3

预期的 O/p

  1
  2
  4
  5

谢谢!

编辑:对于某些 cmets,例如 this 是 break 的预期功能。让我澄清一下:我希望函数类似于 range(0,5) ,我将其用作嵌套循环的一部分,我希望循环继续进行,而不是由于一个文件而退出。

【问题讨论】:

  • 你期望得到什么?
  • 请显示预期的输入和输出。你的问题真的没有意义。这就像问“我的函数在到达 return 语句时返回,我该如何解决这个问题?”
  • 这就是 break 语句的作用按定义...

标签: python loops for-loop break


【解决方案1】:

这就是break 的工作方式。如果您想遍历整个列表,只需删除 break(或者如果您想对该值做一些事情,请使用 pass 作为占位符)。

values = [1, 2, 3, 4, 5]
for value in values:
    if value == 3:
        pass
    print(value)

输出:

1
2
3
4
5  

如果您只想跳过一个值,请使用 continue 关键字。

values = [1, 2, 3, 4, 5]
for value in values:
    if value == 3:
        continue
    print(value)

输出:

1
2
4
5 

【讨论】:

    【解决方案2】:

    Break 自动退出循环。如果您不想在文件名为 3 时打印文件名,请使用 if 语句,如下所示:

    files=[1,2,3,4,5]
    for filename in files:
      if filename!=3:
         print filename
    

    这是结果:

    1
    2
    4
    5
    

    【讨论】:

      猜你喜欢
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 2014-06-10
      相关资源
      最近更新 更多